Hi, Could someone help me with the SAS code to find associations(ie. cross tabulations) between exposed variables? Exposed(exp=1), unexposed=0. Actually, I have a dataset with 30 idchems (over 100,000 obs in total) but I am using only 4 of them as a test to see if the method will work. I used proc transpose to read the idchems as idchem1=990005........... idchem4=211700 and finally found the cross tabulations using proc freq shown in the SAS output. Proc transpose worked well with the test dataset and I was able to find the associations(cross tabulations) as shown in output(attached). Proc transpose for the larger dataset was a problem; SAS couldn't transpose and display all the dataset for the 30 idchems; it transposed and displayed a dataset having only 4 idchems. Could someone help me with a SAS code for another method without the proc transpose or even if with a proc transpose a shorter datastep ie. one that incorporates the dataset with 30 idchems at a time. In summary, a SAS code/method that will help me eventually to find the cross associations for the exposed(1) and unexposed(0) other than the method I used, which of course will not be very efficient for the larger data with 30 idchems. SAS code used is found below and results is attached. Thanks in advance. ak. data idnew1; input id$ job idchem; datalines; os1 1 990005 os1 1 990021 os1 1 211700 os1 2 211700 os1 2 990021 os1 2 210701 os1 2 990005 os2 1 210701 os2 1 990005 os2 2 990021 os2 3 210701 os2 3 990005 os3 3 210701 os3 1 211700 os4 1 210701 os4 1 990005 os4 1 211700 ; run; /*TRANSPOSING VARIABLES*/ proc sort data=idnew1; by id job; proc transpose data=idnew1 out=idnew1b prefix=idchem; by id job; /*id job;*/ var idchem; run; /*Cla exposure*/ data clat; set idnew1b; if idchem1='990005' or idchem2='990005' or idchem3='990005' or idchem4='990005' then cla_exp=1; else cla_exp=0; id_job=catx('_', id, job); put _all_; drop _name_; run; proc print data=clat; Title "Cla exposure"; run; /*Bio exposure*/ data biot; set idnew1b; if idchem1='990021' or idchem2='990021' or idchem3='990021' or idchem4='990021' then bio_exp=1; else bio_exp=0; id_job=catx('_', id, job); put _all_; drop _name_; run; Title "Bio exposure"; proc print data=biot; run; /*Amo exposure*/ data amot; set idnew1b; if idchem1='210701' or idchem2='210701' or idchem3='210701' or idchem4='210701' then amo_exp=1; else amo_exp=0; id_job=catx('_', id, job); put _all_; drop _name_; run; proc print data=amot; Title "Amo exposure"; run; /*Chl exposure*/ data chlt; set idnew1b; if idchem1='211700' or idchem2='211700' or idchem3='211700'or idchem4='211700' then chl_exp=1; else chl_exp=0; id_job=catx('_', id, job); put _all_; drop _name_; run; proc print data=chlt; Title "chl exposure"; run; /* Merging clat,biot and amot files*/ data mlt; merge clat biot amot chlt; run; proc print data=mlt; Title "Merged exposure files for cla ,bio, amo and chl pollutants"; run; /*CROSS ASSOCIATIONS:clat,biot,amot,chlt*/ proc freq data=mlt; tables cla_exp*bio_exp; tables cla_exp*amo_exp; tables cla_exp*chl_exp; tables bio_exp*cla_exp; tables bio_exp*amo_exp; tables bio_exp*chl_exp; run; 1 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK; 72 73 data idnew1; 74 input id$ job idchem; 75 datalines; NOTE: The data set WORK.IDNEW1 has 17 observations and 3 variables. NOTE: DATA statement used (Total process time): real time 0.01 seconds cpu time 0.01 seconds 93 ; 94 run; 95 96 /*TRANSPOSING VARIABLES*/ 97 proc sort data=idnew1; by id job; NOTE: There were 17 observations read from the data set WORK.IDNEW1. NOTE: The data set WORK.IDNEW1 has 17 observations and 3 variables. NOTE: PROCEDURE SORT used (Total process time): real time 0.03 seconds cpu time 0.02 seconds 98 proc transpose data=idnew1 out=idnew1b prefix=idchem; 99 by id job; 100 /*id job;*/ 101 var idchem; 102 run; NOTE: There were 17 observations read from the data set WORK.IDNEW1. NOTE: The data set WORK.IDNEW1B has 8 observations and 7 variables. NOTE: PROCEDURE TRANSPOSE used (Total process time): real time 0.06 seconds cpu time 0.02 seconds 103 104 /*Cla exposure*/ 105 data clat; 106 set idnew1b; 107 if idchem1='990005' or idchem2='990005' or idchem3='990005' or idchem4='990005' then cla_exp=1; 108 else cla_exp=0; 109 id_job=catx('_', id, job); 110 put _all_; 111 drop _name_; 112 run; NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column). 107:12 107:32 107:52 107:72 id=os1 job=1 _NAME_=idchem idchem1=990005 idchem2=990021 idchem3=211700 idchem4=. cla_exp=1 id_job=os1_1 _ERROR_=0 _N_=1 id=os1 job=2 _NAME_=idchem idchem1=211700 idchem2=990021 idchem3=210701 idchem4=990005 cla_exp=1 id_job=os1_2 _ERROR_=0 _N_=2 id=os2 job=1 _NAME_=idchem idchem1=210701 idchem2=990005 idchem3=. idchem4=. cla_exp=1 id_job=os2_1 _ERROR_=0 _N_=3 id=os2 job=2 _NAME_=idchem idchem1=990021 idchem2=. idchem3=. idchem4=. cla_exp=0 id_job=os2_2 _ERROR_=0 _N_=4 id=os2 job=3 _NAME_=idchem idchem1=210701 idchem2=990005 idchem3=. idchem4=. cla_exp=1 id_job=os2_3 _ERROR_=0 _N_=5 id=os3 job=1 _NAME_=idchem idchem1=211700 idchem2=. idchem3=. idchem4=. cla_exp=0 id_job=os3_1 _ERROR_=0 _N_=6 id=os3 job=3 _NAME_=idchem idchem1=210701 idchem2=. idchem3=. idchem4=. cla_exp=0 id_job=os3_3 _ERROR_=0 _N_=7 id=os4 job=1 _NAME_=idchem idchem1=210701 idchem2=990005 idchem3=211700 idchem4=. cla_exp=1 id_job=os4_1 _ERROR_=0 _N_=8 NOTE: There were 8 observations read from the data set WORK.IDNEW1B. NOTE: The data set WORK.CLAT has 8 observations and 8 variables. NOTE: DATA statement used (Total process time): real time 0.03 seconds cpu time 0.02 seconds 113 proc print data=clat; 114 Title "Cla exposure"; 115 run; NOTE: There were 8 observations read from the data set WORK.CLAT. NOTE: PROCEDURE PRINT used (Total process time): real time 0.20 seconds cpu time 0.17 seconds 116 117 /*Bio exposure*/ 118 data biot; 119 set idnew1b; 120 if idchem1='990021' or idchem2='990021' or idchem3='990021' or idchem4='990021' then bio_exp=1; 121 else bio_exp=0; 122 id_job=catx('_', id, job); 123 put _all_; 124 drop _name_; 125 run; NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column). 120:12 120:32 120:52 120:72 id=os1 job=1 _NAME_=idchem idchem1=990005 idchem2=990021 idchem3=211700 idchem4=. bio_exp=1 id_job=os1_1 _ERROR_=0 _N_=1 id=os1 job=2 _NAME_=idchem idchem1=211700 idchem2=990021 idchem3=210701 idchem4=990005 bio_exp=1 id_job=os1_2 _ERROR_=0 _N_=2 id=os2 job=1 _NAME_=idchem idchem1=210701 idchem2=990005 idchem3=. idchem4=. bio_exp=0 id_job=os2_1 _ERROR_=0 _N_=3 id=os2 job=2 _NAME_=idchem idchem1=990021 idchem2=. idchem3=. idchem4=. bio_exp=1 id_job=os2_2 _ERROR_=0 _N_=4 id=os2 job=3 _NAME_=idchem idchem1=210701 idchem2=990005 idchem3=. idchem4=. bio_exp=0 id_job=os2_3 _ERROR_=0 _N_=5 id=os3 job=1 _NAME_=idchem idchem1=211700 idchem2=. idchem3=. idchem4=. bio_exp=0 id_job=os3_1 _ERROR_=0 _N_=6 id=os3 job=3 _NAME_=idchem idchem1=210701 idchem2=. idchem3=. idchem4=. bio_exp=0 id_job=os3_3 _ERROR_=0 _N_=7 id=os4 job=1 _NAME_=idchem idchem1=210701 idchem2=990005 idchem3=211700 idchem4=. bio_exp=0 id_job=os4_1 _ERROR_=0 _N_=8 NOTE: There were 8 observations read from the data set WORK.IDNEW1B. NOTE: The data set WORK.BIOT has 8 observations and 8 variables. NOTE: DATA statement used (Total process time): real time 0.01 seconds cpu time 0.01 seconds 126 Title "Bio exposure"; 127 proc print data=biot; 128 129 run; NOTE: There were 8 observations read from the data set WORK.BIOT. NOTE: PROCEDURE PRINT used (Total process time): real time 0.24 seconds cpu time 0.24 seconds 130 131 /*Amo exposure*/ 132 data amot; 133 set idnew1b; 134 if idchem1='210701' or idchem2='210701' or idchem3='210701' or idchem4='210701' then amo_exp=1; 135 else amo_exp=0; 136 id_job=catx('_', id, job); 137 put _all_; 138 drop _name_; 139 run; NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column). 134:12 134:32 134:52 134:72 id=os1 job=1 _NAME_=idchem idchem1=990005 idchem2=990021 idchem3=211700 idchem4=. amo_exp=0 id_job=os1_1 _ERROR_=0 _N_=1 id=os1 job=2 _NAME_=idchem idchem1=211700 idchem2=990021 idchem3=210701 idchem4=990005 amo_exp=1 id_job=os1_2 _ERROR_=0 _N_=2 id=os2 job=1 _NAME_=idchem idchem1=210701 idchem2=990005 idchem3=. idchem4=. amo_exp=1 id_job=os2_1 _ERROR_=0 _N_=3 id=os2 job=2 _NAME_=idchem idchem1=990021 idchem2=. idchem3=. idchem4=. amo_exp=0 id_job=os2_2 _ERROR_=0 _N_=4 id=os2 job=3 _NAME_=idchem idchem1=210701 idchem2=990005 idchem3=. idchem4=. amo_exp=1 id_job=os2_3 _ERROR_=0 _N_=5 id=os3 job=1 _NAME_=idchem idchem1=211700 idchem2=. idchem3=. idchem4=. amo_exp=0 id_job=os3_1 _ERROR_=0 _N_=6 id=os3 job=3 _NAME_=idchem idchem1=210701 idchem2=. idchem3=. idchem4=. amo_exp=1 id_job=os3_3 _ERROR_=0 _N_=7 id=os4 job=1 _NAME_=idchem idchem1=210701 idchem2=990005 idchem3=211700 idchem4=. amo_exp=1 id_job=os4_1 _ERROR_=0 _N_=8 NOTE: There were 8 observations read from the data set WORK.IDNEW1B. NOTE: The data set WORK.AMOT has 8 observations and 8 variables. NOTE: DATA statement used (Total process time): real time 0.01 seconds cpu time 0.01 seconds 140 141 proc print data=amot; 142 Title "Amo exposure"; 143 run; NOTE: There were 8 observations read from the data set WORK.AMOT. NOTE: PROCEDURE PRINT used (Total process time): real time 0.12 seconds cpu time 0.13 seconds 144 145 146 /*Chl exposure*/ 147 data chlt; 148 set idnew1b; 149 if idchem1='211700' or idchem2='211700' or idchem3='211700'or idchem4='211700' then chl_exp=1; ________ 49 NOTE 49-169: The meaning of an identifier after a quoted string might change in a future SAS release. Inserting white space between a quoted string and the succeeding identifier is recommended. 150 else chl_exp=0; 151 id_job=catx('_', id, job); 152 put _all_; 153 drop _name_; 154 run; NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column). 149:12 149:32 149:52 149:71 id=os1 job=1 _NAME_=idchem idchem1=990005 idchem2=990021 idchem3=211700 idchem4=. chl_exp=1 id_job=os1_1 _ERROR_=0 _N_=1 id=os1 job=2 _NAME_=idchem idchem1=211700 idchem2=990021 idchem3=210701 idchem4=990005 chl_exp=1 id_job=os1_2 _ERROR_=0 _N_=2 id=os2 job=1 _NAME_=idchem idchem1=210701 idchem2=990005 idchem3=. idchem4=. chl_exp=0 id_job=os2_1 _ERROR_=0 _N_=3 id=os2 job=2 _NAME_=idchem idchem1=990021 idchem2=. idchem3=. idchem4=. chl_exp=0 id_job=os2_2 _ERROR_=0 _N_=4 id=os2 job=3 _NAME_=idchem idchem1=210701 idchem2=990005 idchem3=. idchem4=. chl_exp=0 id_job=os2_3 _ERROR_=0 _N_=5 id=os3 job=1 _NAME_=idchem idchem1=211700 idchem2=. idchem3=. idchem4=. chl_exp=1 id_job=os3_1 _ERROR_=0 _N_=6 id=os3 job=3 _NAME_=idchem idchem1=210701 idchem2=. idchem3=. idchem4=. chl_exp=0 id_job=os3_3 _ERROR_=0 _N_=7 id=os4 job=1 _NAME_=idchem idchem1=210701 idchem2=990005 idchem3=211700 idchem4=. chl_exp=1 id_job=os4_1 _ERROR_=0 _N_=8 NOTE: There were 8 observations read from the data set WORK.IDNEW1B. NOTE: The data set WORK.CHLT has 8 observations and 8 variables. NOTE: DATA statement used (Total process time): real time 0.01 seconds cpu time 0.02 seconds 155 156 proc print data=chlt; 157 Title "chl exposure"; 158 run; NOTE: There were 8 observations read from the data set WORK.CHLT. NOTE: PROCEDURE PRINT used (Total process time): real time 0.19 seconds cpu time 0.20 seconds 159 160 /* Merging clat,biot and amot files*/ 161 data mlt; merge clat biot amot chlt; 162 163 run; NOTE: There were 8 observations read from the data set WORK.CLAT. NOTE: There were 8 observations read from the data set WORK.BIOT. NOTE: There were 8 observations read from the data set WORK.AMOT. NOTE: There were 8 observations read from the data set WORK.CHLT. NOTE: The data set WORK.MLT has 8 observations and 11 variables. NOTE: DATA statement used (Total process time): real time 0.02 seconds cpu time 0.02 seconds 164 165 proc print data=mlt; 166 Title "Merged exposure files for cla ,bio, amo and chl pollutants"; 167 run; NOTE: There were 8 observations read from the data set WORK.MLT. NOTE: PROCEDURE PRINT used (Total process time): real time 0.16 seconds cpu time 0.16 seconds 168 169 170 /*CROSS ASSOCIATIONS:clat,biot,amot,chlt*/ 171 proc freq data=mlt; 172 tables cla_exp*bio_exp; 173 tables cla_exp*amo_exp; 174 tables cla_exp*chl_exp; 175 tables bio_exp*cla_exp; 176 tables bio_exp*amo_exp; 177 tables bio_exp*chl_exp; 178 run; NOTE: There were 8 observations read from the data set WORK.MLT. NOTE: PROCEDURE FREQ used (Total process time): real time 0.66 seconds cpu time 0.58 seconds 179 180 181 OPTIONS NONOTES NOSTIMER NOSOURCE NOSYNTAXCHECK; 193
... View more