*Quartile_Maker Macro; *Laura A. Higgins 18 May 2005; *This macro takes AFFY Signal data and assigns quartiles for each chip. This is necessary to calculate Kappa statistics; *for this to work, the AFFY ID needs to be called GENE_name; %macro Quartile_Maker(signal_variable_name, data_in); *FIRST, calculate quartiles for each chip; proc means data = &data_in; var &signal_variable_name; output out=quartile_&signal_variable_name N=N_&signal_variable_name min=min_&signal_variable_name q1=quartile1_&signal_variable_name median = median_&signal_variable_name q3=quartile3_&signal_variable_name max=max_&signal_variable_name; run; *merge quartiles with signal in data_in and copy quartiles down; data quartile_&signal_variable_name; set quartile_&signal_variable_name; dummy_variable = 1; run; data qarcalc_&signal_variable_name; set &data_in; dummy_variable = 1; keep GENE_name &signal_variable_name dummy_variable; run; data qarcalc_&signal_variable_name; merge qarcalc_&signal_variable_name quartile_&signal_variable_name; by dummy_variable; run; *assign quartiles; data qarcalc_&signal_variable_name; set qarcalc_&signal_variable_name; if &signal_variable_name <= quartile1_&signal_variable_name then quartile_&signal_variable_name = 1; if &signal_variable_name <= median_&signal_variable_name & &signal_variable_name > quartile1_&signal_variable_name then quartile_&signal_variable_name = 2; if &signal_variable_name <= quartile3_&signal_variable_name & &signal_variable_name > median_&signal_variable_name then quartile_&signal_variable_name = 3; if &signal_variable_name <= max_&signal_variable_name & &signal_variable_name> quartile3_&signal_variable_name then quartile_&signal_variable_name = 4; keep GENE_name quartile_&signal_variable_name; run; *check quartiles-- all should be 25% of observations!!!; proc freq data = qarcalc_&signal_variable_name; tables quartile_&signal_variable_name; run; *sort and merge quartile back with data_in; proc sort data = &data_in; by GENE_name; run; proc sort data = qarcalc_&signal_variable_name; by GENE_name; run; data &data_in; merge &data_in qarcalc_&signal_variable_name; by GENE_name; run; %mend Quartile_Maker;