Changeset 24441 in main
- Timestamp:
- 01/10/22 16:16:06 (4 months ago)
- Location:
- adopters/nm/trunk/src/main/backend_qModules/3.0/_EPHT/hidd
- Files:
-
- 2 added
- 10 deleted
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
adopters/nm/trunk/src/main/backend_qModules/3.0/_EPHT/hidd/CountDayMaxNM.def
r20797 r24441 1 #CountDayMaxNM.def -- HIDD Flavor with Sasadmidate 1 2 f label Count 2 3 f type special 3 4 ######################################### 4 5 --------BoNdArY-------- 5 1 script 6 OPTIONS MPRINT MLOGIC SYMBOLGEN; 6 1 script NODATE PAGESIZE=4000 NODATE PAGESIZE=4000; 7 7 OPTION SPOOL; 8 8 … … 12 12 proc means data=tmp noprint; 13 13 by sasadmitdate; 14 15 14 var x; 16 15 Class admit_month %cross1% … … 22 21 by admit_month; 23 22 24 proc means data=day sum nway; * mean max minNoprint;25 * by admit_year admit_month;23 proc means data=day nway Noprint; 24 * by month; 26 25 var daily; 27 26 Class %cross1% 28 27 ?cross2? %cross2% ; 29 28 ; 30 31 29 output out=tmp 32 30 max=Number; 33 31 Run; 34 32 proc sort data=tmp out=sorted; 33 by admit_month %cross1% 34 ?cross2? %cross2% 35 ; 36 run; 35 37 proc print; 36 title "NEPHT Daily Asthma NCDM Trial, 2015"; 38 Title1 '/*******************************/'; 39 title2 '1. tmp - Daily maximum by month '; 40 Title3 '/*******************************/'; 41 title ""; 37 42 run; 38 43 39 40 44 /*The Count measure does not need the population 41 45 dataset. The following code, through the end of 42 46 the macro, is used to compute the RSE for the 43 47 data stability indicator. */ 44 45 %let popflag=0; 48 49 data frame; 50 set df_%cross1%%cross2%; 51 proc sort data=frame; 52 by %cross1% 53 ?cross2? %cross2% 54 ; 55 proc print data=frame noobs; 56 Title1 '/*******************************/'; 57 title2 '2. Data Frame '; 58 Title3 '/*******************************/'; 59 run; 60 61 data tmp; 62 merge frame sorted; 63 by %cross1% 64 ?cross2? %cross2% 65 ; 66 run; 67 proc print data=tmp noobs; 68 title2 'Merged Frame & Numerator Dataset '; 69 run; 70 71 46 72 %let flag=0; 47 %let pflag=0;48 73 ?popcross1? %let flag=1; 49 ?popcross1? %let pflag=1;50 74 ?popcross2? %let flag=1; 51 ?popcross2? %let pflag=2;52 75 ?popcross1? ?popcross2? %let flag=2; 53 76 54 77 %macro popcross; 55 78 56 %if &flag=0 %then %do; 57 proc summary data=poptmp; 58 var popcount; 59 output out=pop sum=popnum; 60 run; 61 proc sql; 62 create table rate as 63 select tmp.*, pop.* 64 from tmp, pop 65 quit; 66 %end; 67 68 %if &flag=1 %then %do; 69 proc summary data=poptmp; 70 var popcount; 71 class %popcross1% %popcross2%; 72 output out=pop sum=popnum; 73 proc print data=pop; title2 'POP'; 74 run; 75 proc sql; 76 create table rate as 77 select tmp.*, pop.*, 78 coalesce 79 ?popcross1? (tmp.%cross1%, pop.%popcross1%) 80 ?popcross2? (tmp.%cross2%, pop.%popcross2%) 81 from pop full join tmp 82 on 83 ?popcross1? tmp.%cross1%=pop.%popcross1%; 84 ?popcross2? tmp.%cross2%=pop.%popcross2%; 85 quit; 86 data rate; 87 set rate; 88 %let popflag=1; 89 run; 90 %end; 91 92 %if &flag=2 %then %do; 93 proc summary data=poptmp; 94 var popcount; 95 class %popcross1% %popcross2% ; 96 output out=pop sum=popnum; 97 proc print data=pop; title2 'POP'; 98 run; 99 proc sql; 100 create table rate as 101 select tmp.*, pop.*, 102 coalesce (tmp.%cross1%, pop.%popcross1%), 103 coalesce (tmp.%cross2%, pop.%popcross2%) 104 from pop full join tmp 105 on 106 107 tmp.%cross1%=pop.%popcross1% and 108 tmp.%cross2%=pop.%popcross2%; 109 quit; 110 data rate; 111 set rate; 112 %let popflag=2; 113 run; 114 %end; 115 79 %if &flag=0 %then %do; 80 81 proc summary data=poptmp; 82 var popcount; 83 output out=pop(drop=_TYPE_ _FREQ_) 84 sum=popnum; 85 run; 86 proc sql; 87 create table rate as 88 select tmp.*, pop.* 89 from tmp, pop 90 quit; 91 %end; 92 93 %if &flag=1 %then %do; 94 proc summary data=poptmp; 95 var popcount; 96 class %popcross1% %popcross2%; 97 output out=pop (drop=_TYPE_ _FREQ_) 98 sum=popnum; 99 100 proc sql; 101 create table rate as 102 select tmp.*, pop.* 103 from tmp left join pop 104 on 105 ?popcross1? tmp.%cross1%=pop.%popcross1%; 106 ?popcross2? tmp.%cross2%=pop.%popcross2%; 107 quit; 108 %end; 109 110 %if &flag=2 %then %do; 111 proc summary data=poptmp; 112 var popcount; 113 class %popcross1% %popcross2% ; 114 output out=pop (drop=_TYPE_ _FREQ_) 115 sum=popnum; 116 117 proc sql; 118 create table rate as 119 select tmp.*, pop.* 120 from tmp left join pop 121 on 122 tmp.%cross1%=pop.%popcross1% and 123 tmp.%cross2%=pop.%popcross2%; 124 quit; 125 %end; 116 126 %mend; 117 118 127 %popcross; 119 128 120 129 121 proc print data=rate; title2 'RATE'; 122 123 %macro criscros; 124 %if &popflag = 1 and &pflag = 1 %then %do; 125 %cross1% = _TEMA001; 126 %end; 127 %else 128 %if &popflag = 1 and &pflag = 2 %then %do; 129 %cross2% = _TEMA001; 130 %end; 131 %mend criscros; 132 133 %macro crostwo; 134 %if &popflag = 2 %then %do; 135 %cross1% = _TEMA001; 136 %cross2% = _TEMA002; 137 %end; 138 %mend crostwo; 139 140 data tmp; 130 * Create the output variables for the IBIS xml/map file.; 131 132 proc print data=rate; 133 Title1 '/*******************************/'; 134 title2 '2. RATE DATA for STABILITY '; 135 136 data tmp; 141 137 set rate; 142 138 143 %criscros; 144 %crostwo; 145 146 if number=. then n=0; else n=number; 147 rate=n/popnum; 148 rateper=rate*100000; 149 stderr=sqrt(rate*(1-rate)/popnum)*100000; 150 t1=(rateper-(1.96*stderr)); 151 if (t1<0) then t1=0; 152 LL=put(t1, 8.2); 153 UL=put((rateper+(1.96*stderr)), 8.2); 154 LL=compress(LL); 155 UL=compress(UL); 156 CI=LL || ' - ' || UL; 157 158 159 /*************************************************/ 160 /* Statictical Stability Indicator */ 161 /* based on the relative standard error (RSE, or */ 162 /* coefficient of variance). Redflag values are */ 163 /* converted to images or special characters in */ 164 /* XSLT files (xslt\html\query\module\result\ */ 165 /* ResultPage.xslt and Values.xslt */ 166 /*************************************************/ 167 168 rse=(stderr/rateper); 169 if rse>.3 then redflag=1; *statistical stability 1 red flag; 170 if rse>.5 then redflag=2; *statistical stability - 2 red flags; 171 if stderr=. then redflag=2; *no variance, n=1; 172 keep %cross1% %cross2% n popnum rate rateper LL UL rse redflag; 173 proc print data=tmp; title2 'TMP AGAIN'; 139 if number=. then n=0; else n=number; 140 rate=n/popnum; 141 rateper=rate*100000; 142 stderr=sqrt(rate*(1-rate)/popnum)*100000; 143 144 if n > 0 then do; 145 stderr=sqrt(rate*(1-rate)/popnum)*100000; 146 end; 147 if n = 0 then do; 148 stderr=sqrt((3/popnum)*(1-(3/popnum))/popnum)*100000; 149 end; 150 151 t1=(rateper-(1.96*stderr)); 152 if (t1<0) then t1=0; 153 LL=put(t1, 8.2); 154 UL=put((rateper+(1.96*stderr)), 8.2); 155 UL=compress(UL); 156 LL=compress(LL); 157 158 /*******************************************************/ 159 /* Statictical Stability Indicator Redflag */ 160 /* Based on the relative standard error (RSE), redflag */ 161 /* values are converted to special characters in */ 162 /* IBIS-View application XSLT files */ 163 /* xslt\html\query\module\result\ ResultPage.xslt and */ 164 /* Values.xslt */ 165 /*******************************************************/ 166 167 if n > 0 then do; 168 rse=(stderr/rateper); 169 if rse>.3 then redflag=put('Unstable', $12.); 170 if rse>.5 then redflag=put('VeryUnstable', $12.); 171 if stderr=. then redflag=put('Unstable', $12.); 172 end; 173 if n <= 0 then redflag=put('Unstable', $12.); 174 174 run; 175 176 /*******************************************************/ 177 /* New Mexico Small Numbers Rule */ 178 /*******************************************************/ 179 180 data tmp; 181 set tmp; 182 if ((0<n<4) and (popnum<5000)) then do; 183 n = .A; 184 rate = .A; 185 LL = put('**', 8.0); 186 UL = put('**', 8.0); 187 188 redflag = put('Suppressed', $12.); 189 end; 190 191 if popnum=. then redflag=put('', $12.); 192 run; 193 194 proc print data=tmp; title2 ''; run; 195 Title1 '/************************************************/'; 196 title2 '2. Final RATE DATA for STABILITY to IBIS View app '; 175 197 176 198 /**********************************************/ … … 191 213 192 214 --------BoNdArY-------- 193 f out_variable XMLNum Asthma215 f out_variable XMLNum 194 216 ################################################# 195 217 # definition for output file 196 f xml_out_map_file XMLNum Asthma.map218 f xml_out_map_file XMLNum.map 197 219 --------BoNdArY-------- 198 220 f out_detail lbl_not_used__see_xml_out_map_file -
adopters/nm/trunk/src/main/backend_qModules/3.0/_EPHT/hidd/CountDayMeanNM.def
r20797 r24441 1 #CountDayMeanNM.def -- HIDD Flavor with Sasadmidate 1 2 f label Count 2 3 f type special 3 4 ######################################### 4 5 --------BoNdArY-------- 5 1 script 6 OPTIONS MPRINT MLOGIC SYMBOLGEN; 6 1 script NODATE PAGESIZE=4000 NODATE PAGESIZE=4000; 7 7 OPTION SPOOL; 8 8 9 9 Proc sort data=tmp; 10 by SASADMITDATE;11 12 proc means data=tmp noprint ;13 by SASADMITDATE;10 by sasadmitdate; 11 12 proc means data=tmp noprint nway; 13 by sasadmitdate; 14 14 15 15 var x; 16 Class admit_month 17 %cross1% 16 Class admit_month %cross1% 18 17 ?cross2? %cross2% ; 19 18 ; 20 output out= asthmaday sum=asthmaadmits;21 22 Proc sort data= asthmaday;19 output out=day sum=daily; 20 21 Proc sort data=day; 23 22 by admit_month; 24 23 25 proc means data= asthmaday sum nway; * mean max min Noprint;24 proc means data=day sum nway; * mean max min Noprint; 26 25 * by admit_year admit_month; 27 26 28 var asthmaadmits; 29 27 var daily; 30 28 Class %cross1% 31 29 ?cross2? %cross2% ; 32 ; 33 output out=tmp 30 ; 31 output out=tmp 34 32 mean=Number; 35 Run; 36 33 Run; 34 35 proc sort data=tmp out=sorted; 36 by %cross1% 37 ?cross2? %cross2% 38 ; 39 run; 37 40 proc print; 38 * var admit_year admit_month number maxasthma minasthma asthmaadmits; 39 title "NEPHT Daily Asthma NCDM Trial, 2015"; 41 Title1 '/*******************************/'; 42 title2 '1. tmp - Daily mean by month '; 43 Title3 '/*******************************/'; 40 44 run; 41 45 42 43 46 /*The Count measure does not need the population 44 47 dataset. The following code, through the end of 45 48 the macro, is used to compute the RSE for the 46 49 data stability indicator. */ 47 48 %let popflag=0; 50 51 data frame; 52 set df_%cross1%%cross2%; 53 proc sort data=frame; 54 by %cross1% 55 ?cross2? %cross2% 56 ; 57 proc print data=frame noobs; 58 Title1 '/*******************************/'; 59 title2 '2. Data Frame '; 60 Title3 '/*******************************/'; 61 run; 62 63 data tmp; 64 merge frame sorted; 65 by %cross1% 66 ?cross2? %cross2% 67 ; 68 run; 69 proc print data=tmp noobs; 70 title2 'Merged Frame & Numerator Dataset '; 71 run; 72 73 49 74 %let flag=0; 50 %let pflag=0;51 75 ?popcross1? %let flag=1; 52 ?popcross1? %let pflag=1;53 76 ?popcross2? %let flag=1; 54 ?popcross2? %let pflag=2;55 77 ?popcross1? ?popcross2? %let flag=2; 56 78 57 79 %macro popcross; 58 80 59 %if &flag=0 %then %do; 60 proc summary data=poptmp; 61 var popcount; 62 output out=pop sum=popnum; 63 run; 64 proc sql; 65 create table rate as 66 select tmp.*, pop.* 67 from tmp, pop 68 quit; 69 %end; 70 71 %if &flag=1 %then %do; 72 proc summary data=poptmp; 73 var popcount; 74 class %popcross1% %popcross2%; 75 output out=pop sum=popnum; 76 proc print data=pop; title2 'POP'; 77 run; 78 proc sql; 79 create table rate as 80 select tmp.*, pop.*, 81 coalesce 82 ?popcross1? (tmp.%cross1%, pop.%popcross1%) 83 ?popcross2? (tmp.%cross2%, pop.%popcross2%) 84 from pop full join tmp 85 on 86 ?popcross1? tmp.%cross1%=pop.%popcross1%; 87 ?popcross2? tmp.%cross2%=pop.%popcross2%; 88 quit; 89 data rate; 90 set rate; 91 %let popflag=1; 92 run; 93 %end; 94 95 %if &flag=2 %then %do; 96 proc summary data=poptmp; 97 var popcount; 98 class %popcross1% %popcross2% ; 99 output out=pop sum=popnum; 100 proc print data=pop; title2 'POP'; 101 run; 102 proc sql; 103 create table rate as 104 select tmp.*, pop.*, 105 coalesce (tmp.%cross1%, pop.%popcross1%), 106 coalesce (tmp.%cross2%, pop.%popcross2%) 107 from pop full join tmp 108 on 109 110 tmp.%cross1%=pop.%popcross1% and 111 tmp.%cross2%=pop.%popcross2%; 112 quit; 113 data rate; 114 set rate; 115 %let popflag=2; 116 run; 117 %end; 118 81 %if &flag=0 %then %do; 82 proc summary data=poptmp; 83 var popcount; 84 output out=pop(drop=_TYPE_ _FREQ_) 85 sum=popnum; 86 run; 87 proc sql; 88 create table rate as 89 select tmp.*, pop.* 90 from tmp, pop 91 %end; 92 93 %if &flag=1 %then %do; 94 proc summary data=poptmp; 95 var popcount; 96 class %popcross1% %popcross2%; 97 output out=pop (drop=_TYPE_ _FREQ_) 98 sum=popnum; 99 100 proc sql; 101 create table rate as 102 select tmp.*, pop.* 103 from tmp left join pop 104 on 105 ?popcross1? tmp.%cross1%=pop.%popcross1%; 106 ?popcross2? tmp.%cross2%=pop.%popcross2%; 107 %end; 108 109 %if &flag=2 %then %do; 110 proc summary data=poptmp; 111 var popcount; 112 class %popcross1% %popcross2% ; 113 output out=pop (drop=_TYPE_ _FREQ_) 114 sum=popnum; 115 116 proc sql; 117 create table rate as 118 select tmp.*, pop.* 119 from tmp left join pop 120 on 121 tmp.%cross1%=pop.%popcross1% and 122 tmp.%cross2%=pop.%popcross2%; 123 quit; 124 %end; 119 125 %mend; 120 121 126 %popcross; 122 127 123 124 proc print data=rate; title2 'RATE'; 125 126 %macro criscros; 127 %if &popflag = 1 and &pflag = 1 %then %do; 128 %cross1% = _TEMA001; 129 %end; 130 %else 131 %if &popflag = 1 and &pflag = 2 %then %do; 132 %cross2% = _TEMA001; 133 %end; 134 %mend criscros; 135 136 %macro crostwo; 137 %if &popflag = 2 %then %do; 138 %cross1% = _TEMA001; 139 %cross2% = _TEMA002; 140 %end; 141 %mend crostwo; 142 143 data tmp; 128 * Create the output variables for the IBIS xml/map file.; 129 130 proc print data=rate; 131 Title1 '/*******************************/'; 132 title2 '2. RATE DATA for STABILITY '; 133 134 data tmp; 144 135 set rate; 145 146 %criscros; 147 %crostwo; 148 149 if number=. then n=0; else n=number; 150 rate=n/popnum; 151 rateper=rate*100000; 152 stderr=sqrt(rate*(1-rate)/popnum)*100000; 153 t1=(rateper-(1.96*stderr)); 154 if (t1<0) then t1=0; 155 LL=put(t1, 8.2); 156 UL=put((rateper+(1.96*stderr)), 8.2); 157 LL=compress(LL); 158 UL=compress(UL); 159 CI=LL || ' - ' || UL; 160 161 162 /*************************************************/ 163 /* Statictical Stability Indicator */ 164 /* based on the relative standard error (RSE, or */ 165 /* coefficient of variance). Redflag values are */ 166 /* converted to images or special characters in */ 167 /* XSLT files (xslt\html\query\module\result\ */ 168 /* ResultPage.xslt and Values.xslt */ 169 /*************************************************/ 170 171 rse=(stderr/rateper); 172 if rse>.3 then redflag=1; *statistical stability 1 red flag; 173 if rse>.5 then redflag=2; *statistical stability - 2 red flags; 174 if stderr=. then redflag=2; *no variance, n=1; 175 keep %cross1% %cross2% n popnum rate rateper LL UL rse redflag; 176 proc print data=tmp; title2 'TMP AGAIN'; 136 if number=. then n=0; else n=number; 137 rate=n/popnum; 138 rateper=rate*100000; 139 stderr=sqrt(rate*(1-rate)/popnum)*100000; 140 141 if n > 0 then do; 142 stderr=sqrt(rate*(1-rate)/popnum)*100000; 143 end; 144 if n = 0 then do; 145 stderr=sqrt((3/popnum)*(1-(3/popnum))/popnum)*100000; 146 end; 147 148 t1=(rateper-(1.96*stderr)); 149 if (t1<0) then t1=0; 150 LL=put(t1, 8.2); 151 UL=put((rateper+(1.96*stderr)), 8.2); 152 UL=compress(UL); 153 LL=compress(LL); 154 155 /*******************************************************/ 156 /* Statictical Stability Indicator Redflag */ 157 /* Based on the relative standard error (RSE), redflag */ 158 /* values are converted to special characters in */ 159 /* IBIS-View application XSLT files */ 160 /* xslt\html\query\module\result\ ResultPage.xslt and */ 161 /* Values.xslt */ 162 /*******************************************************/ 163 164 if n > 0 then do; 165 rse=(stderr/rateper); 166 if rse>.3 then redflag=put('Unstable', $12.); 167 if rse>.5 then redflag=put('VeryUnstable', $12.); 168 if stderr=. then redflag=put('Unstable', $12.); 169 end; 170 if n <= 0 then redflag=put('Unstable', $12.); 177 171 run; 172 173 /*******************************************************/ 174 /* New Mexico Small Numbers Rule */ 175 /*******************************************************/ 176 177 data tmp; 178 set tmp; 179 if ((0<n<4) and (popnum<5000)) then do; 180 n = .A; 181 rate = .A; 182 LL = put('**', 8.0); 183 UL = put('**', 8.0); 184 185 redflag = put('Suppressed', $12.); 186 end; 187 188 if popnum=. then redflag=put('', $12.); 189 run; 190 191 proc print data=tmp; title2 ''; run; 192 Title1 '/************************************************/'; 193 title2 '2. Final RATE DATA for STABILITY to IBIS View app '; 178 194 179 195 /**********************************************/ … … 194 210 195 211 --------BoNdArY-------- 196 f out_variable XMLNumAsthma212 f out_variable Num 197 213 ################################################# 198 214 # definition for output file 199 f xml_out_map_file XMLNum Asthma.map215 f xml_out_map_file XMLNum.map 200 216 --------BoNdArY-------- 201 217 f out_detail lbl_not_used__see_xml_out_map_file 202 n 12. 1218 n 12.0 203 219 redflag 12.0 204 220 --------BoNdArY-------- -
adopters/nm/trunk/src/main/backend_qModules/3.0/_EPHT/hidd/CountDayMinNM.def
r20797 r24441 1 #CountDayMaxNM.def -- HIDD Flavor with Sasadmidate 1 2 f label Count 2 3 f type special 3 4 ######################################### 4 5 --------BoNdArY-------- 5 1 script 6 OPTIONS MPRINT MLOGIC SYMBOLGEN; 6 1 script NODATE PAGESIZE=4000 NODATE PAGESIZE=4000; 7 7 OPTION SPOOL; 8 8 9 /* year removed from steps and month removed from second step */ 10 9 11 Proc sort data=tmp; 10 12 by sasadmitdate; … … 12 14 proc means data=tmp nway noprint; 13 15 by sasadmitdate; 14 15 16 var x; 16 Class admit_month %cross1% 17 Class admit_month 18 %cross1% 17 19 ?cross2? %cross2% ; 18 ; 20 ; 19 21 output out=day sum=daily; 20 22 … … 22 24 by admit_month; 23 25 24 proc means data=day sum nway ; * mean max minNoprint;25 * by admit_year admit_month;26 proc means data=day sum nway Noprint; 27 * by month; 26 28 var daily; 27 29 Class %cross1% 28 ?cross2? %cross2% 29 ; 30 31 output out=tmp 30 ?cross2? %cross2% ; 31 ; 32 output out=tmp 32 33 min=Number; 33 Run; 34 Run; 35 proc sort data=tmp out=sorted; 36 by %cross1% 37 ?cross2? %cross2% 38 ; 39 run; 34 40 proc print; 35 title "data tmp - Daily Minimum"; 41 Title1 '/*******************************/'; 42 title2 '1. tmp - Daily maximum by month '; 43 Title3 '/*******************************/'; 44 title ""; 36 45 run; 37 46 38 47 /*The Count measure does not need the population 39 48 dataset. The following code, through the end of 40 49 the macro, is used to compute the RSE for the 41 50 data stability indicator. */ 42 43 %let popflag=0; 51 52 data frame; 53 set df_%cross1%%cross2%; 54 proc sort data=frame; 55 by %cross1% 56 ?cross2? %cross2% 57 ; 58 proc print data=frame noobs; 59 Title1 '/*******************************/'; 60 title2 '2. Data Frame '; 61 Title3 '/*******************************/'; 62 run; 63 64 data tmp; 65 merge frame sorted; 66 by %cross1% 67 ?cross2? %cross2% 68 ; 69 run; 70 proc print data=tmp noobs; 71 title2 'Merged Frame & Numerator Dataset '; 72 run; 73 74 44 75 %let flag=0; 45 %let pflag=0;46 76 ?popcross1? %let flag=1; 47 ?popcross1? %let pflag=1;48 77 ?popcross2? %let flag=1; 49 ?popcross2? %let pflag=2;50 78 ?popcross1? ?popcross2? %let flag=2; 51 79 52 80 %macro popcross; 53 81 54 %if &flag=0 %then %do; 55 proc summary data=poptmp; 56 var popcount; 57 output out=pop sum=popnum; 58 run; 59 proc sql; 60 create table rate as 61 select tmp.*, pop.* 62 from tmp, pop 63 quit; 64 %end; 65 66 %if &flag=1 %then %do; 67 proc summary data=poptmp; 68 var popcount; 69 class %popcross1% %popcross2%; 70 output out=pop sum=popnum; 71 proc print data=pop; title2 'POP'; 72 run; 73 proc sql; 74 create table rate as 75 select tmp.*, pop.*, 76 coalesce 77 ?popcross1? (tmp.%cross1%, pop.%popcross1%) 78 ?popcross2? (tmp.%cross2%, pop.%popcross2%) 79 from pop full join tmp 80 on 81 ?popcross1? tmp.%cross1%=pop.%popcross1%; 82 ?popcross2? tmp.%cross2%=pop.%popcross2%; 83 quit; 84 data rate; 85 set rate; 86 %let popflag=1; 87 run; 88 %end; 89 90 %if &flag=2 %then %do; 91 proc summary data=poptmp; 92 var popcount; 93 class %popcross1% %popcross2% ; 94 output out=pop sum=popnum; 95 proc print data=pop; title2 'POP'; 96 run; 97 proc sql; 98 create table rate as 99 select tmp.*, pop.*, 100 coalesce (tmp.%cross1%, pop.%popcross1%), 101 coalesce (tmp.%cross2%, pop.%popcross2%) 102 from pop full join tmp 103 on 104 105 tmp.%cross1%=pop.%popcross1% and 106 tmp.%cross2%=pop.%popcross2%; 107 quit; 108 data rate; 109 set rate; 110 %let popflag=2; 111 run; 112 %end; 113 82 %if &flag=0 %then %do; 83 84 proc summary data=poptmp; 85 var popcount; 86 87 output out=pop(drop=_TYPE_ _FREQ_) 88 sum=popnum; 89 run; 90 proc sql; 91 create table rate as 92 select tmp.*, pop.* 93 from tmp, pop 94 quit; 95 %end; 96 97 %if &flag=1 %then %do; 98 proc summary data=poptmp; 99 var popcount; 100 class %popcross1% %popcross2%; 101 output out=pop (drop=_TYPE_ _FREQ_) 102 sum=popnum; 103 104 proc sql; 105 create table rate as 106 select tmp.*, pop.* 107 from tmp left join pop 108 on 109 ?popcross1? tmp.%cross1%=pop.%popcross1%; 110 ?popcross2? tmp.%cross2%=pop.%popcross2%; 111 quit; 112 %end; 113 114 %if &flag=2 %then %do; 115 proc summary data=poptmp; 116 var popcount; 117 class %popcross1% %popcross2% ; 118 output out=pop (drop=_TYPE_ _FREQ_) 119 sum=popnum; 120 121 proc sql; 122 create table rate as 123 select tmp.*, pop.* 124 from tmp left join pop 125 on 126 tmp.%cross1%=pop.%popcross1% and 127 tmp.%cross2%=pop.%popcross2%; 128 quit; 129 %end; 114 130 %mend; 115 116 131 %popcross; 117 132 118 133 119 proc print data=rate; title2 'RATE'; 120 121 %macro criscros; 122 %if &popflag = 1 and &pflag = 1 %then %do; 123 %cross1% = _TEMA001; 124 %end; 125 %else 126 %if &popflag = 1 and &pflag = 2 %then %do; 127 %cross2% = _TEMA001; 128 %end; 129 %mend criscros; 130 131 %macro crostwo; 132 %if &popflag = 2 %then %do; 133 %cross1% = _TEMA001; 134 %cross2% = _TEMA002; 135 %end; 136 %mend crostwo; 137 138 data tmp; 134 * Create the output variables for the IBIS xml/map file.; 135 136 proc print data=rate; 137 Title1 '/*******************************/'; 138 title2 '2. RATE DATA for STABILITY '; 139 140 data tmp; 139 141 set rate; 140 142 141 %criscros; 142 %crostwo; 143 144 if number=. then n=0; else n=number; 145 rate=n/popnum; 146 rateper=rate*100000; 147 stderr=sqrt(rate*(1-rate)/popnum)*100000; 148 t1=(rateper-(1.96*stderr)); 149 if (t1<0) then t1=0; 150 LL=put(t1, 8.2); 151 UL=put((rateper+(1.96*stderr)), 8.2); 152 LL=compress(LL); 153 UL=compress(UL); 154 CI=LL || ' - ' || UL; 155 156 157 /*************************************************/ 158 /* Statictical Stability Indicator */ 159 /* based on the relative standard error (RSE, or */ 160 /* coefficient of variance). Redflag values are */ 161 /* converted to images or special characters in */ 162 /* XSLT files (xslt\html\query\module\result\ */ 163 /* ResultPage.xslt and Values.xslt */ 164 /*************************************************/ 165 166 rse=(stderr/rateper); 167 if rse>.3 then redflag=1; *statistical stability 1 red flag; 168 if rse>.5 then redflag=2; *statistical stability - 2 red flags; 169 if stderr=. then redflag=2; *no variance, n=1; 170 keep %cross1% %cross2% n popnum rate rateper LL UL rse redflag; 171 proc print data=tmp; title2 'TMP AGAIN'; 143 if number=. then n=0; else n=number; 144 rate=n/popnum; 145 rateper=rate*100000; 146 stderr=sqrt(rate*(1-rate)/popnum)*100000; 147 148 if n > 0 then do; 149 stderr=sqrt(rate*(1-rate)/popnum)*100000; 150 end; 151 if n = 0 then do; 152 stderr=sqrt((3/popnum)*(1-(3/popnum))/popnum)*100000; 153 end; 154 155 t1=(rateper-(1.96*stderr)); 156 if (t1<0) then t1=0; 157 LL=put(t1, 8.2); 158 UL=put((rateper+(1.96*stderr)), 8.2); 159 UL=compress(UL); 160 LL=compress(LL); 161 162 /*******************************************************/ 163 /* Statictical Stability Indicator Redflag */ 164 /* Based on the relative standard error (RSE), redflag */ 165 /* values are converted to special characters in */ 166 /* IBIS-View application XSLT files */ 167 /* xslt\html\query\module\result\ ResultPage.xslt and */ 168 /* Values.xslt */ 169 /*******************************************************/ 170 171 if n > 0 then do; 172 rse=(stderr/rateper); 173 if rse>.3 then redflag=put('Unstable', $12.); 174 if rse>.5 then redflag=put('VeryUnstable', $12.); 175 if stderr=. then redflag=put('Unstable', $12.); 176 end; 177 if n <= 0 then redflag=put('Unstable', $12.); 172 178 run; 179 180 /*******************************************************/ 181 /* New Mexico Small Numbers Rule */ 182 /*******************************************************/ 183 184 data tmp; 185 set tmp; 186 if ((0<n<4) and (popnum<5000)) then do; 187 n = .A; 188 rate = .A; 189 LL = put('**', 8.0); 190 UL = put('**', 8.0); 191 192 redflag = put('Suppressed', $12.); 193 end; 194 195 if popnum=. then redflag=put('', $12.); 196 run; 197 198 proc print data=tmp; title2 ''; run; 199 Title1 '/************************************************/'; 200 title2 '2. Final RATE DATA for STABILITY to IBIS View app '; 173 201 174 202 /**********************************************/ … … 189 217 190 218 --------BoNdArY-------- 191 f out_variable XMLNum Asthma219 f out_variable XMLNum 192 220 ################################################# 193 221 # definition for output file 194 f xml_out_map_file XMLNum Asthma.map222 f xml_out_map_file XMLNum.map 195 223 --------BoNdArY-------- 196 224 f out_detail lbl_not_used__see_xml_out_map_file -
adopters/nm/trunk/src/main/backend_qModules/3.0/_EPHT/hidd/NM_CrudeRate100K.def
r21905 r24441 1 f label Crude&Rate 1 #NM_RateCrude100K.def 2 2 f type special 3 #f data_where4 #f pop_where 1<=region<=55 3 ######################################### 6 4 --------BoNdArY-------- 7 5 1 script 8 OPTIONS MPRINT MLOGIC SYMBOLGEN ;6 OPTIONS MPRINT MLOGIC SYMBOLGEN NONUMBER NODATE PAGESIZE=4000; 9 7 OPTION SPOOL; 8 9 %LET MULTIPLIER=100000; 10 11 **************** 1. Numerator data, TMP *******; 10 12 11 13 proc summary data=tmp; 12 14 var x; 13 class %cross1% %cross2%; 14 output out=tmp sum=number; 15 proc print data=tmp; title1 ' '; title2 'TMP'; 16 run; 17 18 19 %let popflag=0; 15 class %cross1% 16 ?cross2? %cross2% 17 ; 18 output out=tmp (drop=_TYPE_ _FREQ_) 19 sum=number; 20 21 proc sort data=tmp out=sorted; by %cross1% 22 ?cross2? %cross2% 23 ; 24 run; 25 26 proc print data=tmp noobs; 27 title1 '----------------------------------'; 28 title2 '1. Numerator data -- TMP '; 29 title3 '----------------------------------'; 30 run; 31 32 **************** 2. %data_frame% ***************; 33 34 35 data frame; 36 set df_%cross1%%cross2% ; 37 run; 38 proc sort data=frame; by %cross1% 39 ?cross2? %cross2% 40 ; run; 41 proc print data=frame noobs; 42 title2 '2. Data Frame'; 43 run; 44 45 data tmp; 46 merge frame sorted; *must list frame dataset first, then tmp; 47 by %cross1% 48 ?cross2? %cross2% 49 ; 50 run; 51 proc print data=tmp noobs; 52 title2 '2. Framed Numerator data -- TMP '; 53 run; 54 55 56 ****** Join pop denominators framed data. ******; 57 20 58 %let flag=0; 21 %let pflag=0;22 59 ?popcross1? %let flag=1; 23 ?popcross1? %let pflag=1;24 60 ?popcross2? %let flag=1; 25 ?popcross2? %let pflag=2;26 27 61 ?popcross1? ?popcross2? %let flag=2; 28 62 … … 30 64 31 65 %if &flag=0 %then %do; 32 proc summary data=poptmp; 33 var popcount; 34 output out=pop sum=popnum; 35 run; 36 37 proc print data=pop; title2 'POP'; 38 run; 39 proc sql; 40 create table rate as 41 select tmp.*, pop.* 42 from tmp, pop 43 quit; 66 proc summary data=poptmp; 67 var popcount; 68 output out=pop (drop=_TYPE_ _FREQ_) 69 sum=popnum; 70 run; 71 72 proc print data=pop; 73 title2 '3. Population Denominators '; 74 run; 75 76 proc sql; 77 create table rate as 78 select tmp.*, pop.* 79 from tmp, pop 80 quit; 44 81 %end; 45 82 46 83 %if &flag=1 %then %do; 47 proc summary data=poptmp; 48 var popcount; 49 class %popcross1% %popcross2%; 50 output out=pop sum=popnum; 51 proc print data=pop; title2 'POP'; 84 proc summary data=poptmp; 85 var popcount; 86 class %popcross1% %popcross2%; 87 output out=pop (drop=_TYPE_ _FREQ_) 88 sum=popnum; 89 proc print data=pop; 90 title2 '3. Population Denominators '; 91 run; 92 93 proc sql; 94 create table rate as 95 select tmp.*, pop.* 96 from tmp left join pop 97 on 98 ?popcross1? tmp.%cross1%=pop.%popcross1%; 99 ?popcross2? tmp.%cross2%=pop.%popcross2%; 100 quit; 101 %end; 102 103 %if &flag=2 %then %do; 104 proc summary data=poptmp; 105 var popcount; 106 class %popcross1% %popcross2% ; 107 output out=pop (drop=_TYPE_ _FREQ_) 108 sum=popnum; 109 proc print data=pop; 110 title2 '3. Numerator & Denominators '; 52 111 run; 53 112 proc sql; 54 113 create table rate as 55 select tmp.*, pop.*, 56 coalesce 57 ?popcross1? (tmp.%cross1%, pop.%popcross1%) 58 ?popcross2? (tmp.%cross2%, pop.%popcross2%) 59 from pop full join tmp 114 select tmp.*, pop.* 115 from tmp full join pop 60 116 on 61 62 63 ?popcross1? tmp.%cross1%=pop.%popcross1%;64 ?popcross2? tmp.%cross2%=pop.%popcross2%;65 quit;66 data rate;67 set rate;68 %let popflag=1;69 run;70 %end;71 72 %if &flag=2 %then %do;73 proc summary data=poptmp;74 var popcount;75 class %popcross1% %popcross2% ;76 output out=pop sum=popnum;77 proc print data=pop; title2 'POP';78 run;79 proc sql;80 create table rate as81 select tmp.*, pop.*,82 coalesce (tmp.%cross1%, pop.%popcross1%),83 coalesce (tmp.%cross2%, pop.%popcross2%)84 from pop full join tmp85 on86 87 117 tmp.%cross1%=pop.%popcross1% and 88 118 tmp.%cross2%=pop.%popcross2%; 89 quit; 90 data rate; 91 set rate; 92 %let popflag=2; 93 run; 94 95 %end; 119 quit; 120 %end; 96 121 %mend; 97 122 %popcross; 98 123 99 proc print data=rate; title2 'RATE'; 100 101 %macro criscros; 102 %if &popflag = 1 and &pflag = 1 %then %do; 103 %cross1% = _TEMA001; 104 %end; 105 %else 106 %if &popflag = 1 and &pflag = 2 %then %do; 107 %cross2% = _TEMA001; 108 %end; 109 %mend criscros; 110 111 %macro crostwo; 112 %if &popflag = 2 %then %do; 113 %cross1% = _TEMA001; 114 %cross2% = _TEMA002; 115 %end; 116 %mend crostwo; 117 118 data tmp; 124 proc print data=rate; 125 title2 '3. Rate Ready Data '; 126 run; 127 128 129 ****************** Rates data. ***************; 130 131 data rates; 119 132 set rate; 120 %criscros; 121 %crostwo; 122 123 if number=. then n=0; else n=number; 124 rate=n/popnum; 125 rateper=(rate*100000); 126 stderr=sqrt(rate*(1-rate)/popnum)*100000; 127 t1=(rateper-(1.96*stderr)); 128 if (t1<0) then t1=0; 129 LCL=put(t1, 8.2); 130 UCL=put((rateper+(1.96*stderr)), 8.2); 131 LCL=compress(LCL); 132 UCL=compress(UCL); 133 CI=LCL || ' - ' || UCL; 134 135 136 *redflag; 137 /*redflag is the statistical stability indicator, 138 based on the relative standard error (RSE, or 139 coefficient of variance). Redflag values are 140 converted to images or special characters in XSLT 141 files (xslt\html\query\module\result\ResultPage.xslt 142 and ...Values.xslt*/ 143 144 rse=(stderr/rateper); 145 if rse>.3 then redflag=1; *statistical stability 1 red flag; 146 if rse>.5 then redflag=2; *statistical stability - 2 red flags; 147 if stderr=. then redflag=2; *no variance, n=1; 133 if number=. then n=0; else n=number; 134 rate=n/popnum; 135 if n > 0 then do; 136 rateper=(rate*&MULTIPLIER); 137 stderr=sqrt(rate*(1-rate)/popnum)*&MULTIPLIER; 138 end; 139 if n <= 0 then do; 140 rateper=0; 141 stderr=sqrt((3/popcount)*(1-(3/popnum))/popnum)*&MULTIPLIER; 142 end; 143 t1=(rateper-(1.96*stderr)); 144 if (t1<0) then t1=0; 145 LCL=put(t1, 8.2); 146 UCL=put((rateper+(1.96*stderr)), 8.2); 147 LCL=compress(LCL); 148 UCL=compress(UCL); 149 150 151 ******** Statistical Stability Redflag. ********; 152 /*Redflag is the statistical stability indicator, 153 based on RSE converted to images or special 154 characters in XSLT files ResultPage.xslt and 155 Values.xslt (xslt\html\query\module\result\).*/ 156 157 if n > 0 then do; 158 rse=(stderr/rateper); 159 redflag=put('', $12.); 160 if rse>.3 then redflag=put('Unstable', $12.); 161 if rse>.5 then redflag=put('VeryUnstable', $12.); 162 if stderr=. then redflag=put('Unstable', $12.); 163 end; 164 if n <= 0 then redflag=put('Unstable', $12.); 165 *no variance, n=0, rse=div by zero; 148 166 run; 149 proc print data=tmp; title 'almost final tmp'; run; 150 151 data tmp; 152 set tmp; 153 /* New Mexico Small Numbers Rule */ 154 if ((0<n<4) and (popnum<5000)) then do; 155 n = .A; 156 rateper = .A; 157 LCL = put('**', 8.0); 158 UCL = put('**', 8.0); 159 end; 160 proc print data=tmp; title 'final tmp'; run; 167 168 proc print data=rates; 169 title2 '4. Rates Data '; 170 run; 171 172 173 ********* New Mexico Small Numbers Rule ******; 174 175 data tmp; 176 set rates; 177 if ((0<n<4) and (popnum<5000)) then do; 178 n = .A; 179 LCL = put('**', 8.0); 180 UCL = put('**', 8.0); 181 redflag = put('Suppressed', $12.); 182 end; 183 if popnum=. then redflag=put('', $12.); 184 run; 185 186 proc print data=tmp; 187 title2 '5. Final Data '; run; 161 188 162 189 --------BoNdArY-------- … … 169 196 n 15.0 170 197 popnum 15.0 171 LCL 15.1 172 UCL 15.1 173 redflag 15.0 174 --------BoNdArY-------- 175 --------BoNdArY-------- 176 1 suppressed_variables 4 198 LCL 15.3 199 UCL 15.3 200 redflag 12.0 201 --------BoNdArY-------- 202 --------BoNdArY-------- 203 1 suppressed_variables 5 204 rateper 177 205 n 178 rateper179 L CL180 U CL181 --------BoNdArY-------- 206 popcount 207 LL 208 UL 209 --------BoNdArY-------- -
adopters/nm/trunk/src/main/backend_qModules/3.0/_EPHT/hidd/NM_CrudeRate10k.def
r21905 r24441 1 f label Crude&Rate 1 #NM_RateCrude10K.def 2 2 f type special 3 #f data_where4 #f pop_where 1<=region<=55 3 ######################################### 6 4 --------BoNdArY-------- 7 5 1 script 8 OPTIONS MPRINT MLOGIC SYMBOLGEN ;6 OPTIONS MPRINT MLOGIC SYMBOLGEN NONUMBER NODATE PAGESIZE=4000; 9 7 OPTION SPOOL; 8 9 %LET MULTIPLIER=10000; 10 11 **************** 1. Numerator data, TMP *******; 10 12 11 13 proc summary data=tmp; 12 14 var x; 13 class %cross1% %cross2%; 14 output out=tmp sum=number; 15 proc print data=tmp; title1 ' '; title2 'TMP'; 16 run; 17 18 19 %let popflag=0; 15 class %cross1% 16 ?cross2? %cross2% 17 ; 18 output out=tmp (drop=_TYPE_ _FREQ_) 19 sum=number; 20 21 proc sort data=tmp out=sorted; 22 by %cross1% 23 ?cross2? %cross2% 24 ; 25 run; 26 27 proc print data=tmp noobs; 28 title1 '----------------------------------'; 29 title2 '1. Numerator data -- TMP '; 30 title3 '----------------------------------'; 31 run; 32 33 **************** 2. %data_frame% ***************; 34 35 36 data frame; 37 set df_%cross1%%cross2% ; 38 run; 39 proc sort data=frame; by %cross1% 40 ?cross2? %cross2% 41 ; run; 42 proc print data=frame noobs; 43 title2 '2. Data Frame'; 44 run; 45 46 data tmp; 47 merge frame sorted; *must list frame dataset first, then tmp; 48 by %cross1% 49 ?cross2? %cross2% 50 ; 51 run; 52 proc print data=tmp noobs; 53 title2 '2. Framed Numerator data -- TMP '; 54 run; 55 56 57 ****** Join pop denominators framed data. ******; 58 20 59 %let flag=0; 21 %let pflag=0;22 60 ?popcross1? %let flag=1; 23 ?popcross1? %let pflag=1;24 61 ?popcross2? %let flag=1; 25 ?popcross2? %let pflag=2;26 27 62 ?popcross1? ?popcross2? %let flag=2; 28 63 … … 30 65 31 66 %if &flag=0 %then %do; 32 proc summary data=poptmp; 33 var popcount; 34 output out=pop sum=popnum; 35 run; 36 37 proc print data=pop; title2 'POP'; 38 run; 39 proc sql; 40 create table rate as 41 select tmp.*, pop.* 42 from tmp, pop 43 quit; 67 proc summary data=poptmp; 68 var popcount; 69 output out=pop (drop=_TYPE_ _FREQ_) 70 sum=popnum; 71 run; 72 73 proc print data=pop; 74 title2 '3. Population Denominators '; 75 run; 76 77 proc sql; 78 create table rate as 79 select tmp.*, pop.* 80 from tmp, pop 81 quit; 44 82 %end; 45 83 46 84 %if &flag=1 %then %do; 47 proc summary data=poptmp; 48 var popcount; 49 class %popcross1% %popcross2%; 50 output out=pop sum=popnum; 51 proc print data=pop; title2 'POP'; 85 proc summary data=poptmp; 86 var popcount; 87 class %popcross1% %popcross2%; 88 output out=pop (drop=_TYPE_ _FREQ_) 89 sum=popnum; 90 proc print data=pop; 91 title2 '3. Population Denominators '; 92 run; 93 94 proc sql; 95 create table rate as 96 select tmp.*, pop.* 97 from tmp left join pop 98 on 99 ?popcross1? tmp.%cross1%=pop.%popcross1%; 100 ?popcross2? tmp.%cross2%=pop.%popcross2%; 101 quit; 102 %end; 103 104 %if &flag=2 %then %do; 105 proc summary data=poptmp; 106 var popcount; 107 class %popcross1% %popcross2% ; 108 output out=pop (drop=_TYPE_ _FREQ_) 109 sum=popnum; 110 proc print data=pop; 111 title2 '3. Numerator & Denominators '; 52 112 run; 53 113 proc sql; 54 114 create table rate as 55 select tmp.*, pop.*, 56 coalesce 57 ?popcross1? (tmp.%cross1%, pop.%popcross1%) 58 ?popcross2? (tmp.%cross2%, pop.%popcross2%) 59 from pop full join tmp 115 select tmp.*, pop.* 116 from tmp full join pop 60 117 on 61 62 63 ?popcross1? tmp.%cross1%=pop.%popcross1%;64 ?popcross2? tmp.%cross2%=pop.%popcross2%;65 quit;66 data rate;67 set rate;68 %let popflag=1;69 run;70 %end;71 72 %if &flag=2 %then %do;73 proc summary data=poptmp;74 var popcount;75 class %popcross1% %popcross2% ;76 output out=pop sum=popnum;77 proc print data=pop; title2 'POP';78 run;79 proc sql;80 create table rate as81 select tmp.*, pop.*,82 coalesce (tmp.%cross1%, pop.%popcross1%),83 coalesce (tmp.%cross2%, pop.%popcross2%)84 from pop full join tmp85 on86 87 118 tmp.%cross1%=pop.%popcross1% and 88 119 tmp.%cross2%=pop.%popcross2%; 89 quit; 90 data rate; 91 set rate; 92 %let popflag=2; 93 run; 94 95 %end; 120 quit; 121 %end; 96 122 %mend; 97 123 %popcross; 98 124 99 proc print data=rate; title2 'RATE'; 100 101 %macro criscros; 102 %if &popflag = 1 and &pflag = 1 %then %do; 103 %cross1% = _TEMA001; 104 %end; 105 %else 106 %if &popflag = 1 and &pflag = 2 %then %do; 107 %cross2% = _TEMA001; 108 %end; 109 %mend criscros; 110 111 %macro crostwo; 112 %if &popflag = 2 %then %do; 113 %cross1% = _TEMA001; 114 %cross2% = _TEMA002; 115 %end; 116 %mend crostwo; 117 118 data tmp; 125 proc print data=rate; 126 title2 '3. Rate Ready Data '; 127 run; 128 129 130 ****************** Rates data. ***************; 131 132 data rates; 119 133 set rate; 120 %criscros; 121 %crostwo; 122 123 if number=. then n=0; else n=number; 124 rate=n/popnum; 125 rateper=(rate*10000); 126 stderr=sqrt(rate*(1-rate)/popnum)*10000; 127 t1=(rateper-(1.96*stderr)); 128 if (t1<0) then t1=0; 129 LCL=put(t1, 8.2); 130 UCL=put((rateper+(1.96*stderr)), 8.2); 131 LCL=compress(LCL); 132 UCL=compress(UCL); 133 CI=LCL || ' - ' || UCL; 134 135 136 *redflag; 137 /*redflag is the statistical stability indicator, 138 based on the relative standard error (RSE, or 139 coefficient of variance). Redflag values are 140 converted to images or special characters in XSLT 141 files (xslt\html\query\module\result\ResultPage.xslt 142 and ...Values.xslt*/ 143 144 rse=(stderr/rateper); 145 if rse>.3 then redflag=1; *statistical stability 1 red flag; 146 if rse>.5 then redflag=2; *statistical stability - 2 red flags; 147 if stderr=. then redflag=2; *no variance, n=1; 134 if number=. then n=0; else n=number; 135 rate=n/popnum; 136 if n > 0 then do; 137 rateper=(rate*&MULTIPLIER); 138 stderr=sqrt(rate*(1-rate)/popnum)*&MULTIPLIER; 139 end; 140 if n <= 0 then do; 141 rateper=0; 142 stderr=sqrt((3/popcount)*(1-(3/popnum))/popnum)*&MULTIPLIER; 143 end; 144 t1=(rateper-(1.96*stderr)); 145 if (t1<0) then t1=0; 146 LCL=put(t1, 8.2); 147 UCL=put((rateper+(1.96*stderr)), 8.2); 148 LCL=compress(LCL); 149 UCL=compress(UCL); 150 151 152 ******** Statistical Stability Redflag. ********; 153 /*Redflag is the statistical stability indicator, 154 based on RSE converted to images or special 155 characters in XSLT files ResultPage.xslt and 156 Values.xslt (xslt\html\query\module\result\).*/ 157 158 if n > 0 then do; 159 rse=(stderr/rateper); 160 redflag=put('', $12.); 161 if rse>.3 then redflag=put('Unstable', $12.); 162 if rse>.5 then redflag=put('VeryUnstable', $12.); 163 if stderr=. then redflag=put('Unstable', $12.); 164 end; 165 if n <= 0 then redflag=put('Unstable', $12.); 166 *no variance, n=0, rse=div by zero; 148 167 run; 149 proc print data=tmp; title 'almost final tmp'; run; 150 151 data tmp; 152 set tmp; 153 /* New Mexico Small Numbers Rule */ 154 if ((0<n<4) and (popnum<5000)) then do; 155 n = .A; 156 rateper = .A; 157 LCL = put('**', 8.0); 158 UCL = put('**', 8.0); 159 end; 160 proc print data=tmp; title 'final tmp'; run; 168 169 proc print data=rates; 170 title2 '4. Rates Data '; 171 run; 172 173 174 ********* New Mexico Small Numbers Rule ******; 175 176 data tmp; 177 set rates; 178 if ((0<n<4) and (popnum<5000)) then do; 179 n = .A; 180 LCL = put('**', 8.0); 181 UCL = put('**', 8.0); 182 redflag = put('Suppressed', $12.); 183 end; 184 if popnum=. then redflag=put('', $12.); 185 run; 186 187 proc print data=tmp; 188 title2 '5. Final Data '; run; 161 189 162 190 --------BoNdArY-------- … … 169 197 n 15.0 170 198 popnum 15.0 171 LCL 15.1 172 UCL 15.1 173 redflag 15.0 174 --------BoNdArY-------- 175 --------BoNdArY-------- 176 1 suppressed_variables 4 199 LCL 15.3 200 UCL 15.3 201 redflag 12.0 202 --------BoNdArY-------- 203 --------BoNdArY-------- 204 1 suppressed_variables 5 205 rateper 177 206 n 178 rateper179 L CL180 U CL181 --------BoNdArY-------- 207 popcount 208 LL 209 UL 210 --------BoNdArY-------- -
adopters/nm/trunk/src/main/backend_qModules/3.0/_EPHT/hidd/NM_RateAA100K.def
r21905 r24441 15 15 OPTION SPOOL; 16 16 17 %LET MULTIPLIER=100000; 18 %LET STDVAR=agepop; 19 %LET NCAT=11; 17 20 ************************** 1. TMP ******************************; 18 21 * The dataset 'tmp' is the numerator dataset that has been read ; … … 21 24 * The variable "x" must be in the dataset, it is set equal to 1.; 22 25 ****************************************************************; 26 Data tmp; 27 set tmp; 28 agepop=agepop_a; 29 run; 30 23 31 proc summary data=tmp; 24 32 var x; 25 class agepop_a%cross1%33 class &STDVAR. %cross1% 26 34 ?cross2? %cross2% 27 35 ; 28 output out=tmp sum=count; 29 proc sort data=tmp; by agepop_a %cross1% 30 ?cross2? %cross2% 36 output out=tmp (drop=_TYPE_ _FREQ_) sum=count; 37 38 proc sort data=tmp; 39 by %cross1% %cross2% &STDVAR.; 31 40 ; run; 32 41 proc print data=tmp noobs; 33 title1 '---------------------------------'; 34 title2 '1. TMP - numerator dataset'; 35 run; 42 title1 '---------------------------------'; 43 title2 '1. TMP - numerator dataset '; 44 title3 '---------------------------------'; 45 run; 36 46 37 47 ********************** 2. %data_frame% *************************; … … 43 53 ****************************************************************; 44 54 data agepop_frame; 45 retain count 0;46 do47 agepop_a= 1 to 11by 1 ;55 retain count 0; 56 do 57 &STDVAR. = 1 to &NCAT. by 1 ; 48 58 output; 49 end;59 end; 50 60 run; 51 61 *************************************************************************************; … … 55 65 * then crosses by sex), there will be a total row for the cross1 and cross2 values. ; 56 66 * So in a later step, the new_frame dataset is sorted with a "nodupkey" option to ; 57 * remove the additional dimension total values. 67 * remove the additional dimension total values.; 58 68 *************************************************************************************; 69 59 70 data crosstotalframe; 60 retain count 0;61 do71 retain count 0; 72 do 62 73 %cross1%=.; 63 74 ?cross2? %cross2%=.; 64 75 output; 65 end; 66 run; 76 end; 77 run; 78 67 79 data df_%cross1%%cross2%; 68 set df_%cross1%%cross2% crosstotalframe; 69 run; 70 proc print data=df_%cross1%%cross2% noobs; title2 'cross1cross2 frame with total row'; run; 71 proc print data=agepop_frame noobs; title2 'agepop frame'; run; 80 set df_%cross1%%cross2% crosstotalframe; 81 run; 82 83 proc print data=df_%cross1%%cross2% noobs; 84 title2 'cross1cross2 frame with total row'; run; 85 proc print data=agepop_frame noobs; 86 title2 'agepop frame'; run; 72 87 proc sql; 73 88 create table new_frame as … … 76 91 quit; 77 92 proc sort data=new_frame nodupkey; 78 by %cross1% 79 ?cross2? %cross2% 80 agepop_a; 81 run; 82 proc print data=new_frame noobs; title2 'new_frame, sorted with nodupkey'; run; 83 proc sort data=tmp; by %cross1% %cross2% agepop_a; run; 84 data newtmp; 85 merge new_frame tmp; *must list frame dataset first, then tmp; 86 by %cross1% %cross2% agepop_a; 87 drop _TYPE_ _FREQ_ ; 93 by %cross1% 94 ?cross2? %cross2% 95 &STDVAR.; 96 run; 97 98 proc print data=new_frame noobs; 99 title2 'new_frame, sorted with nodupkey'; run; 100 101 proc sort data=tmp out=sorted; 102 by %cross1% %cross2% &STDVAR; run; 103 data newtmp; 104 merge new_frame sorted; * tmp, must list frame dataset first, then sorted tmp; 105 by %cross1% %cross2% &STDVAR.; 106 drop _TYPE_ _FREQ_ ; 88 107 run; 89 108 90 109 proc print data=newtmp noobs; 91 title2 '2. NEWTMP, after frame merged with tmp';110 title2 '2. NEWTMP, after frame merged with tmp'; 92 111 run; 93 112 data tmp; 94 113 set newtmp; 95 114 run; 96 115 … … 100 119 * cross1 and cross2 totals to -1. ; 101 120 ****************************************************************; 102 data poptmp; format agepop %popcross1% %popcross2% 8.; set poptmp; run; 121 data poptmp; 122 format &STDVAR. %popcross1% %popcross2% 8.; 123 set poptmp; 124 run; 103 125 proc summary data=poptmp; 104 126 var popcount; 105 class agepop%popcross1% %popcross2%;106 output out=pop sum=popcount;127 class &STDVAR. %popcross1% %popcross2%; 128 output out=pop (drop=_TYPE_ _FREQ_) sum=popcount; 107 129 run; 108 130 data pop; 109 set pop; 110 drop _TYPE_ _FREQ_; 111 proc print data=pop noobs; 112 title2 '3. POP - denominator dataset'; 113 run; 114 131 set pop; 132 133 proc print data=pop noobs; 134 title1 '---------------------------------'; 135 title2 '3. POP - denominator dataset '; 136 title3 '---------------------------------'; 137 run; 138 115 139 *********************** 4. NUMBERS *****************************; 116 140 * Join tmp, pop. ; 117 141 * -1 values are left of out NUMBERS because stdpop doesn't have ; 118 * any -1 values. ; 142 * any -1 values. ; 143 * The popcross flag is not used here because the use of the age grouping variable ; 144 * allows for each of the following rows of the join statement to begin with "and". ; 119 145 ****************************************************************; 120 146 proc sql; … … 122 148 select tmp.*, pop.* 123 149 from tmp left join pop 124 on tmp. agepop_a=pop.agepop150 on tmp.&STDVAR. = pop.&STDVAR. 125 151 ?popcross1? and tmp.%cross1%=pop.%popcross1% 126 152 ?popcross2? and tmp.%cross2%=pop.%popcross2% … … 129 155 data numbers; 130 156 set numbers; 131 if agepop_a^=.; *get rid of total rows to stop doubling from pop proc summary;157 if &STDVAR.^=.; *get rid of total rows to stop doubling from pop proc summary; 132 158 if %cross1%=. then %cross1%=-1; 133 159 ?cross2? if %cross2%=. then %cross2%=-1; 134 160 proc print data=numbers noobs; 135 title2 '4. NUMBERS';136 title3 '';161 title2 '4. NUMBERS '; 162 title3 '---------------------------------'; 137 163 run; 138 164 139 165 ************************ 5. STDWGT *****************************; 140 * Select the appropriate records from the stdwgts datafile.;141 * All weights are for U.S. 2000 standard population (per NCHS ; 142 * Statnote20). 'stdvar' values are as follows:;143 * agepop - the standard 11 age group weights;144 * agepopGE35 - agepop wgts for age>=35;145 * AADist10 - Statnote20 dist #10, for BRFSS;146 * AADist10GE40 - AADist10 for ages >=40;147 * AADist10GE50 - AADist10 for ages >=50;148 * AgeGrp18 - 5-year age groups, for cancer data;149 * AgeGrp18LT50 - AgeGrp18 for age <50 ; 150 * AgeGrp18GE50 - AgeGrp18 for age >=50 ; 151 * AgeGrp18LT15 - AgeGrp18 for age <15 ; 152 * AgeGrp18LT20 - AgeGrp18 for age <20 ; 166 * Select the appropriate records from the stdwgts datafile. ; 167 168 *'stdvar' variable names are as follows: ; 169 * agepop - the standard 11 age group weights ; 170 * agepopGE25 - agepop wgts for age>=35 ; 171 * agepopGE35 - agepop wgts for age>=35 ; 172 * Using this version of the age-adjustment .DEF file requires ; 173 * that you have variables in both your numerator and denominator; 174 * datasets with this variable name. ; 175 176 177 178 153 179 ****************************************************************; 154 180 data stdwgt; 155 informat stdwgt 7.6; 156 set pop.stdwgts; 157 *pop libname is set in .cfg file with the saspop statement; 158 if (stdvar='agepop'); *stdvar name is case-sensitive; 159 keep agepop stdwgt; 160 run; 181 *format agevar $12.; 182 informat stdwgt 7.6; 183 set pop.stdwgts; 184 *pop libname is set in .cfg file with the saspop statement; 185 if (stdvar="&STDVAR."); 186 keep &STDVAR. stdwgt; 187 run; 161 188 proc print data=stdwgt noobs; 162 189 title2 '5. STDWGT- std. pop. weights for direct age-adjustment'; … … 171 198 select numbers.*, stdwgt.stdwgt 172 199 from numbers left join stdwgt 173 on numbers. agepop=stdwgt.agepop200 on numbers.&STDVAR.=stdwgt.&STDVAR. 174 201 ; 175 202 quit; … … 197 224 *****************************************************************; 198 225 proc summary data=agespecific nway; 199 var ratewgt rate_var count popcount; 200 class %cross1% %cross2%; 201 output out=aarate sum(ratewgt rate_var count popcount)=aarate aarate_var count popcount; 202 run; 203 data aarate; 204 set aarate; 205 drop _TYPE_ _FREQ_ ; 206 run; 207 proc sort data=aarate; by %cross1% %cross2%; run; 226 var ratewgt rate_var count popcount; 227 class %cross1% %cross2%; 228 output out=aarate (drop=_TYPE_ _FREQ_ ) 229 sum(ratewgt rate_var count popcount)=aarate aarate_var count popcount; 230 run; 231 232 233 234 235 proc sort data=aarate; by %cross1% %cross2%; run; 208 236 proc print data=aarate noobs; 209 title2 '8. AARATE - summed across weighted agepop cross-products to get AA rate and';237 title2 "8. AARATE - summed across weighted &STDVAR. cross-products to get AA rate and"; 210 238 title3 'rate variance within each cross-by var'; 211 239 run; … … 216 244 * coded back to '.' after this step. ; 217 245 ****************************************************************; 218 data tmp; 246 247 data rate; 219 248 set aarate; 220 249 if %cross1%=-1 then %cross1%=.; *Recode the statewide totals.; … … 222 251 223 252 if (count>0) then do; 224 rateper=(aarate* 100000);253 rateper=(aarate*&MULTIPLIER.); 225 254 rate_se=sqrt(aarate_var); 226 stderr=(rate_se* 100000);255 stderr=(rate_se*&MULTIPLIER.); 227 256 end; 228 257 if (count<=0) then do; … … 230 259 231 260 rateper=0; 232 stderr=sqrt((3/popcount)*(1-(3/popcount))/popcount)* 100000;261 stderr=sqrt((3/popcount)*(1-(3/popcount))/popcount)*&MULTIPLIER.; 233 262 end; 234 263 t1=(rateper-(1.96*stderr)); … … 247 276 * (xslt\html\query\module\result\ResultPage.xslt, ...Values.xslt ; 248 277 *****************************************************************; 278 249 279 if count>0 then do; 250 280 rse=(stderr/rateper); 251 redflag=put(' -', $14.);252 if rse>.3 then redflag=put('Unstable', $1 4.);253 if rse>.5 then redflag=put('Very Unstable', $1 4.);254 if stderr=. then redflag=put('Unstable', $1 4.);281 redflag=put(' ', $12.); 282 if rse>.3 then redflag=put('Unstable', $12.); 283 if rse>.5 then redflag=put('Very Unstable', $12.); 284 if stderr=. then redflag=put('Unstable', $12.); 255 285 end; 256 if count<=0 then redflag=put('Unstable', $1 4.); *no variance, n=0, rse=div by zero;286 if count<=0 then redflag=put('Unstable', $12.); *no variance, n=0, rse=div by zero; 257 287 run; 258 288 … … 269 299 * code at the end of this file to work. ; 270 300 *******************************************************************; 301 271 302 data tmp; 272 set tmp;273 if ((0<n<4) and ( popcount<5000)) then do;303 set rate; 304 if ((0<n<4) and (.<popcount<5000)) then do; 274 305 n = .A; 275 306 rateper = .A; 276 307 LL = put('**', 8.0); 277 308 UL = put('**', 8.0); 309 *only 1 val attr allowed, over-write redflag if suppressed; 310 redflag = put('Suppressed', $12.); 278 311 end; 279 312 proc print data=tmp noobs; title2 '11. TMP - final dataset to pass to IBIS View app'; … … 281 314 282 315 --------BoNdArY-------- 283 f out_variable rateper316 f out_variable 284 317 # definition for output file 285 f xml_out_map_file XMLRate10 0KNDLCLUCL.map318 f xml_out_map_file XMLRate10KNDLCLUCL.map 286 319 --------BoNdArY-------- 287 320 f out_detail lbl_not_used__see_xml_out_map_file -
adopters/nm/trunk/src/main/backend_qModules/3.0/_EPHT/hidd/NM_RateAA10K.def
r21905 r24441 15 15 OPTION SPOOL; 16 16 17 %LET MULTIPLIER=10000; 18 %LET STDVAR=agepop; 19 %LET NCAT=11; 17 20 ************************** 1. TMP ******************************; 18 21 * The dataset 'tmp' is the numerator dataset that has been read ; 19 22 * in already by ibis-q. Any filters have already been applied. ; 20 * The proc summary counts deaths by agepop_a, cross1, and cross2. ; 21 * The variable "x" must be in the dataset, it is set equal to 1.; 22 ****************************************************************; 23 * The proc summary counts deaths by agepop, cross1, and cross2. ; 24 * The variable "x" must be in the dataset, it is set equal to 1.; 25 * Use SAS=3 in your query application URL to see the 'print' results at each step. ; 26 ****************************************************************; 27 28 Data tmp; 29 set tmp; 30 agepop=agepop_a; 31 run; 32 23 33 proc summary data=tmp; 24 34 var x; 25 class agepop_a%cross1%35 class &STDVAR. %cross1% 26 36 ?cross2? %cross2% 27 37 ; 28 output out=tmp sum=count; 29 proc sort data=tmp; by agepop_a %cross1% 30 ?cross2? %cross2% 38 output out=tmp (drop=_TYPE_ _FREQ_) sum=count; 39 40 proc sort data=tmp; 41 by %cross1% %cross2% &STDVAR.; 31 42 ; run; 32 43 proc print data=tmp noobs; 33 title1 '---------------------------------'; 34 title2 '1. TMP - numerator dataset'; 35 run; 44 title1 '---------------------------------'; 45 title2 '1. TMP - numerator dataset '; 46 title3 '---------------------------------'; 47 run; 36 48 37 49 ********************** 2. %data_frame% *************************; … … 43 55 ****************************************************************; 44 56 data agepop_frame; 45 retain count 0;46 do47 agepop_a= 1 to 11by 1 ;57 retain count 0; 58 do 59 &STDVAR. = 1 to &NCAT. by 1 ; 48 60 output; 49 end;61 end; 50 62 run; 51 63 *************************************************************************************; … … 55 67 * then crosses by sex), there will be a total row for the cross1 and cross2 values. ; 56 68 * So in a later step, the new_frame dataset is sorted with a "nodupkey" option to ; 57 * remove the additional dimension total values. 69 * remove the additional dimension total values.; 58 70 *************************************************************************************; 71 59 72 data crosstotalframe; 60 retain count 0;61 do73 retain count 0; 74 do 62 75 %cross1%=.; 63 76 ?cross2? %cross2%=.; 64 77 output; 65 end; 66 run; 78 end; 79 run; 80 67 81 data df_%cross1%%cross2%; 68 set df_%cross1%%cross2% crosstotalframe; 69 run; 70 proc print data=df_%cross1%%cross2% noobs; title2 'cross1cross2 frame with total row'; run; 71 proc print data=agepop_frame noobs; title2 'agepop frame'; run; 82 set df_%cross1%%cross2% crosstotalframe; 83 run; 84 85 proc print data=df_%cross1%%cross2% noobs; 86 title2 'cross1cross2 frame with total row'; run; 87 proc print data=agepop_frame noobs; 88 title2 'agepop frame'; run; 72 89 proc sql; 73 90 create table new_frame as … … 76 93 quit; 77 94 proc sort data=new_frame nodupkey; 78 by %cross1% 79 ?cross2? %cross2% 80 agepop_a; 81 run; 82 proc print data=new_frame noobs; title2 'new_frame, sorted with nodupkey'; run; 83 proc sort data=tmp; by %cross1% %cross2% agepop_a; run; 84 data newtmp; 85 merge new_frame tmp; *must list frame dataset first, then tmp; 86 by %cross1% %cross2% agepop_a; 87 drop _TYPE_ _FREQ_ ; 95 by %cross1% 96 ?cross2? %cross2% 97 &STDVAR.; 98 run; 99 100 proc print data=new_frame noobs; 101 title2 'new_frame, sorted with nodupkey'; run; 102 103 proc sort data=tmp out=sorted; 104 by %cross1% %cross2% &STDVAR; run; 105 data newtmp; 106 merge new_frame sorted; * tmp, must list frame dataset first, then sorted tmp; 107 by %cross1% %cross2% &STDVAR.; 108 drop _TYPE_ _FREQ_ ; 88 109 run; 89 110 90 111 proc print data=newtmp noobs; 91 title2 '2. NEWTMP, after frame merged with tmp';112 title2 '2. NEWTMP, after frame merged with tmp'; 92 113 run; 93 114 data tmp; 94 115 set newtmp; 95 116 run; 96 117 … … 100 121 * cross1 and cross2 totals to -1. ; 101 122 ****************************************************************; 102 data poptmp; format agepop %popcross1% %popcross2% 8.; set poptmp; run; 123 data poptmp; 124 format &STDVAR. %popcross1% %popcross2% 8.; 125 set poptmp; 126 run; 103 127 proc summary data=poptmp; 104 128 var popcount; 105 class agepop%popcross1% %popcross2%;106 output out=pop sum=popcount;129 class &STDVAR. %popcross1% %popcross2%; 130 output out=pop (drop=_TYPE_ _FREQ_) sum=popcount; 107 131 run; 108 132 data pop; 109 set pop; 110 drop _TYPE_ _FREQ_; 111 proc print data=pop noobs; 112 title2 '3. POP - denominator dataset'; 113 run; 114 133 set pop; 134 135 proc print data=pop noobs; 136 title1 '---------------------------------'; 137 title2 '3. POP - denominator dataset '; 138 title3 '---------------------------------'; 139 run; 140 115 141 *********************** 4. NUMBERS *****************************; 116 142 * Join tmp, pop. ; 117 143 * -1 values are left of out NUMBERS because stdpop doesn't have ; 118 * any -1 values. ; 144 * any -1 values. ; 145 * The popcross flag is not used here because the use of the age grouping variable ; 146 * allows for each of the following rows of the join statement to begin with "and". ; 119 147 ****************************************************************; 120 148 proc sql; … … 122 150 select tmp.*, pop.* 123 151 from tmp left join pop 124 on tmp. agepop_a=pop.agepop152 on tmp.&STDVAR. = pop.&STDVAR. 125 153 ?popcross1? and tmp.%cross1%=pop.%popcross1% 126 154 ?popcross2? and tmp.%cross2%=pop.%popcross2% … … 129 157 data numbers; 130 158 set numbers; 131 if agepop_a^=.; *get rid of total rows to stop doubling from pop proc summary;159 if &STDVAR.^=.; *get rid of total rows to stop doubling from pop proc summary; 132 160 if %cross1%=. then %cross1%=-1; 133 161 ?cross2? if %cross2%=. then %cross2%=-1; 134 162 proc print data=numbers noobs; 135 title2 '4. NUMBERS';136 title3 '';163 title2 '4. NUMBERS '; 164 title3 '---------------------------------'; 137 165 run; 138 166 139 167 ************************ 5. STDWGT *****************************; 140 * Select the appropriate records from the stdwgts datafile. ; 141 * All weights are for U.S. 2000 standard population (per NCHS ; 142 * Statnote20). 'stdvar' values are as follows: ; 143 * agepop - the standard 11 age group weights ; 144 * agepopGE35 - agepop wgts for age>=35 ; 145 * AADist10 - Statnote20 dist #10, for BRFSS ; 146 * AADist10GE40 - AADist10 for ages >=40 ; 147 * AADist10GE50 - AADist10 for ages >=50 ; 148 * AgeGrp18 - 5-year age groups, for cancer data ; 149 * AgeGrp18LT50 - AgeGrp18 for age <50 ; 150 * AgeGrp18GE50 - AgeGrp18 for age >=50 ; 151 * AgeGrp18LT15 - AgeGrp18 for age <15 ; 152 * AgeGrp18LT20 - AgeGrp18 for age <20 ; 168 * Select the appropriate records from the stdwgts datafile. ; 169 *'stdvar' variable names are as follows: ; 170 * agepop - the standard 11 age group weights ; 171 * agepopGE25 - agepop wgts for age>=35 ; 172 * agepopGE35 - agepop wgts for age>=35 ; 173 * Using this version of the age-adjustment .DEF file requires ; 174 * that you have variables in both your numerator and denominator; 175 * datasets with this variable name. ; 153 176 ****************************************************************; 154 177 data stdwgt; 155 informat stdwgt 7.6; 156 set pop.stdwgts; 157 *pop libname is set in .cfg file with the saspop statement; 158 if (stdvar='agepop'); *stdvar name is case-sensitive; 159 keep agepop stdwgt; 160 run; 178 *format agevar $12.; 179 informat stdwgt 7.6; 180 set pop.stdwgts; 181 *pop libname is set in .cfg file with the saspop statement; 182 if (stdvar="&STDVAR."); 183 keep &STDVAR. stdwgt; 184 run; 161 185 proc print data=stdwgt noobs; 162 186 title2 '5. STDWGT- std. pop. weights for direct age-adjustment'; … … 171 195 select numbers.*, stdwgt.stdwgt 172 196 from numbers left join stdwgt 173 on numbers. agepop=stdwgt.agepop197 on numbers.&STDVAR.=stdwgt.&STDVAR. 174 198 ; 175 199 quit; … … 197 221 *****************************************************************; 198 222 proc summary data=agespecific nway; 199 var ratewgt rate_var count popcount; 200 class %cross1% %cross2%; 201 output out=aarate sum(ratewgt rate_var count popcount)=aarate aarate_var count popcount; 202 run; 203 data aarate; 204 set aarate; 205 drop _TYPE_ _FREQ_ ; 206 run; 207 proc sort data=aarate; by %cross1% %cross2%; run; 223 var ratewgt rate_var count popcount; 224 class %cross1% %cross2%; 225 output out=aarate (drop=_TYPE_ _FREQ_ ) 226 sum(ratewgt rate_var count popcount)=aarate aarate_var count popcount; 227 run; 228 proc sort data=aarate; by %cross1% %cross2%; run; 208 229 proc print data=aarate noobs; 209 title2 '8. AARATE - summed across weighted agepop cross-products to get AA rate and';230 title2 "8. AARATE - summed across weighted &STDVAR. cross-products to get AA rate and"; 210 231 title3 'rate variance within each cross-by var'; 211 232 run; … … 216 237 * coded back to '.' after this step. ; 217 238 ****************************************************************; 218 data tmp; 239 240 data rate; 219 241 set aarate; 220 242 if %cross1%=-1 then %cross1%=.; *Recode the statewide totals.; … … 222 244 223 245 if (count>0) then do; 224 rateper=(aarate* 10000);246 rateper=(aarate*&MULTIPLIER.); 225 247 rate_se=sqrt(aarate_var); 226 stderr=(rate_se* 10000);248 stderr=(rate_se*&MULTIPLIER.); 227 249 end; 228 250 if (count<=0) then do; … … 230 252 231 253 rateper=0; 232 stderr=sqrt((3/popcount)*(1-(3/popcount))/popcount)* 10000;254 stderr=sqrt((3/popcount)*(1-(3/popcount))/popcount)*&MULTIPLIER.; 233 255 end; 234 256 t1=(rateper-(1.96*stderr)); … … 247 269 * (xslt\html\query\module\result\ResultPage.xslt, ...Values.xslt ; 248 270 *****************************************************************; 271 249 272 if count>0 then do; 250 273 rse=(stderr/rateper); 251 redflag=put(' -', $14.);252 if rse>.3 then redflag=put('Unstable', $1 4.);253 if rse>.5 then redflag=put('Very Unstable', $1 4.);254 if stderr=. then redflag=put('Unstable', $1 4.);274 redflag=put(' ', $12.); 275 if rse>.3 then redflag=put('Unstable', $12.); 276 if rse>.5 then redflag=put('Very Unstable', $12.); 277 if stderr=. then redflag=put('Unstable', $12.); 255 278 end; 256 if count<=0 then redflag=put('Unstable', $1 4.); *no variance, n=0, rse=div by zero;279 if count<=0 then redflag=put('Unstable', $12.); *no variance, n=0, rse=div by zero; 257 280 run; 258 281 … … 269 292 * code at the end of this file to work. ; 270 293 *******************************************************************; 294 271 295 data tmp; 272 set tmp;273 if ((0<n<4) and ( popcount<5000)) then do;296 set rate; 297 if ((0<n<4) and (.<popcount<5000)) then do; 274 298 n = .A; 275 299 rateper = .A; 276 300 LL = put('**', 8.0); 277 301 UL = put('**', 8.0); 302 *only 1 val attr allowed, over-write redflag if suppressed; 303 redflag = put('Suppressed', $12.); 278 304 end; 279 305 proc print data=tmp noobs; title2 '11. TMP - final dataset to pass to IBIS View app'; -
adopters/nm/trunk/src/main/backend_qModules/3.0/_EPHT/hidd/NM_RateAA10K_GE25.def
r23695 r24441 1 #NM_RateAA10K_GE25 _data_frame.def1 #NM_RateAA10K_GE25.def 2 2 #Calculates directly age-adjusted rates per 10,000 for 3 3 # records that have been filtered by IBIS-Q (data=tmp) 4 4 #Uses the IBIS-Q data_frame for cross1 and cross2 5 #Uses an "agepop_frame" so all agegrp18 (agepop elsewhere) 6 # groups are always included/represented (weights will sum to 1.0)5 #Uses an "agepop_frame" so all agegrp18 (agepop elsewhere) 6 # groups are always included/represented (weights will sum to 1.0) 7 7 #NM_ in filename = applies cell suppression rule 8 8 #Outputs redflag var based on RSE … … 15 15 OPTION SPOOL; 16 16 17 %LET MULTIPLIER=10000; 18 %LET STDVAR=agegrp18; 19 %LET NCAT=18; 17 20 ************************** 1. TMP ******************************; 18 21 * The dataset 'tmp' is the numerator dataset that has been read ; … … 21 24 * The variable "x" must be in the dataset, it is set equal to 1.; 22 25 ****************************************************************; 26 27 Data tmp; 28 set tmp; 29 agegrp18=agegrp18_a; 30 run; 23 31 proc summary data=tmp; 24 var x; 25 class agegrp18_a %cross1% 32 var x; 33 class &STDVAR. 34 %cross1% 26 35 ?cross2? %cross2% 27 36 ; 28 output out=tmp sum=count;29 proc sort data=tmp; by agegrp18_a %cross1%30 ?cross2? %cross2%31 ; run;32 /*37 output out=tmp (drop=_TYPE_ _FREQ_) 38 sum=count; 39 proc sort data=tmp; 40 by %cross1% %cross2% &STDVAR.; 41 run; 33 42 proc print data=tmp noobs; 34 title1 '---------------------------------'; 35 title2 '1. TMP - numerator dataset'; 36 run; 37 */ 43 title1 '---------------------------------'; 44 title2 '1. TMP - numerator dataset '; 45 title3 '---------------------------------'; 46 run; 47 38 48 ********************** 2. %data_frame% *************************; 39 49 * %data_frame% is a dataset created by IBIS-Q. It consists of ; … … 46 56 retain count 0; 47 57 do 48 agegrp18_a = 1 to 18by 1 ;58 &STDVAR. = 1 to &NCAT. by 1 ; 49 59 output; 50 60 end; … … 79 89 quit; 80 90 proc sort data=new_frame nodupkey; 81 by %cross1% 82 ?cross2? %cross2% 83 agegrp18_a; 84 run; 85 *proc print data=new_frame noobs; title2 'new_frame, sorted with nodupkey'; run; 86 proc sort data=tmp; by %cross1% %cross2% agegrp18_a; run; 87 data newtmp; 88 merge new_frame tmp; *must list frame dataset first, then tmp; 89 by %cross1% %cross2% agegrp18_a; 91 by %cross1% 92 ?cross2? %cross2% 93 &STDVAR.; 94 run; 95 /* 96 proc print data=new_frame noobs; title2 'new_frame, sorted with nodupkey'; run; 97 proc sort data=tmp; by %cross1% %cross2% &STDVAR.; run; 98 */ 99 proc sort data=tmp out=sorted; 100 by %cross1% %cross2% &STDVAR; run; 101 data newtmp; 102 merge new_frame sorted; * tmp, must list frame dataset first, then sorted tmp; 103 by %cross1% %cross2% &STDVAR.; 90 104 drop _TYPE_ _FREQ_ ; 91 105 run; 92 /* 106 93 107 proc print data=newtmp noobs; 94 108 title2 '2. NEWTMP, after frame merged with tmp'; 95 109 run; 96 */ 110 97 111 data tmp; 98 112 set newtmp; … … 104 118 * cross1 and cross2 totals to -1. ; 105 119 ****************************************************************; 106 data poptmp; format agegrp18 %popcross1% %popcross2% 8.; set poptmp; run; 120 data poptmp; format &STDVAR %popcross1% %popcross2% 8.; 121 set poptmp; run; 107 122 proc summary data=poptmp; 108 var popcount; 109 class agegrp18 %popcross1% %popcross2%; 110 output out=pop sum=popcount; 123 var popcount; 124 class &STDVAR. %popcross1% %popcross2%; 125 output out=pop (drop=_TYPE_ _FREQ_) 126 sum=popcount; 111 127 run; 112 128 data pop; 113 set pop; 114 drop _TYPE_ _FREQ_; 115 proc print data=pop noobs; 116 title2 '3. POP - denominator dataset'; 117 run; 118 129 set pop; 130 proc print data=pop noobs; 131 title2 '3. POP - denominator dataset'; 132 run; 133 119 134 *********************** 4. NUMBERS *****************************; 120 135 * Join tmp, pop. ; 121 136 * -1 values are left of out NUMBERS because stdpop doesn't have ; 122 * any -1 values. ;137 * any -1 values. 123 138 ****************************************************************; 124 139 proc sql; … … 126 141 select tmp.*, pop.* 127 142 from tmp left join pop 128 on tmp. agegrp18_a=pop.agegrp18143 on tmp.&STDVAR.=pop.&STDVAR. 129 144 ?popcross1? and tmp.%cross1%=pop.%popcross1% 130 145 ?popcross2? and tmp.%cross2%=pop.%popcross2% … … 133 148 data numbers; 134 149 set numbers; 135 if agegrp18_a^=.; *get rid of total rows to stop doubling from pop proc summary;150 if &STDVAR.^=.; *get rid of total rows to stop doubling from pop proc summary; 136 151 if %cross1%=. then %cross1%=-1; 137 ?cross2? if %cross2%=. then %cross2%=-1; 138 /* 152 ?cross2? if %cross2%=. then %cross2%=-1; 153 139 154 proc print data=numbers noobs; 140 155 title2 '4. NUMBERS'; 141 156 title3 ' '; 142 run; 143 */ 157 run; 158 144 159 ************************ 5. STDWGT *****************************; 145 160 * Select the appropriate records from the stdwgts datafile. ; … … 161 176 set pop.stdwgts; 162 177 *pop libname is set in .cfg file with the saspop statement; 163 if (stdvar= 'AgeGrp18GE25'); *stdvar name is case-sensitive;164 keep agegrp18stdwgt;165 run; 166 /* 178 if (stdvar="AgeGrp18GE25"); 179 keep &STDVAR. stdwgt; 180 run; 181 167 182 proc print data=stdwgt noobs; 168 183 title2 '5. STDWGT- std. pop. weights for direct age-adjustment'; 169 run; 170 */ 184 run; 185 171 186 ******************** 6. NUMBERS2 *******************************; 172 187 * Adds the standard population weights to the numerator and ; … … 178 193 select numbers.*, stdwgt.stdwgt 179 194 from numbers left join stdwgt 180 on numbers. agegrp18=stdwgt.agegrp18195 on numbers.&STDVAR.=stdwgt.&STDVAR. 181 196 ; 182 quit; 183 /* 197 quit; 198 184 199 proc print data=numbers2 noobs; 185 200 title2 '6. NUMBERS2- Standard POP wgts merged onto dataset'; 186 201 run; 187 */ 202 188 203 *********************** 7. AGESPECIFIC *************************; 189 204 * Calculate age-specific rates & cross-products ; … … 195 210 * Montana method... rate_var=count*(stdwgt/popcount)**2; * New formula from doh.wa.gov; 196 211 rate_var=(stdwgt**2)*((r*(1-r))/popcount); 197 /* 212 198 213 proc print data=agespecific noobs; 199 214 title2 '7. AGESPECIFIC - combines numer and denom data, includes R (age-specific proportion),'; 200 215 title3 'RATEWGT (weighted age-specific rate), and RATE_VAR (rate variance) vars'; 201 216 run; 202 */ 217 203 218 ************************ 8. AARATE ******************************; 204 219 * Sum the age-specific rates into aa rates, and merge wgtmax. ; 205 220 *****************************************************************; 206 221 proc summary data=agespecific nway; 207 var ratewgt rate_var count popcount; 208 class %cross1% %cross2%; 209 output out=aarate sum(ratewgt rate_var count popcount)=aarate aarate_var count popcount; 210 run; 211 data aarate; 212 set aarate; 213 drop _TYPE_ _FREQ_ ; 214 run; 215 proc sort data=aarate; by %cross1% %cross2%; run; 216 /* 222 var ratewgt rate_var count popcount; 223 class %cross1% %cross2%; 224 output out=aarate (drop=_TYPE_ _FREQ_ ) 225 sum(ratewgt rate_var count popcount)=aarate aarate_var count popcount; 226 227 run; 228 proc sort data=aarate; by %cross1% %cross2%; run; 229 217 230 proc print data=aarate noobs; 218 title2 '8. AARATE - summed across weighted agepop cross-products to get AA rate and';219 title3 'rate variance within each cross-by var';220 run; 221 */ 231 title2 "8. AARATE - summed across weighted &STDVAR. cross-products to get AA rate and"; 232 title3 'rate variance within each cross-by var'; 233 run; 234 222 235 ******************* 9. TMP *************************************; 223 236 * Almost final IBIS output dataset. ; … … 225 238 * coded back to '.' after this step. ; 226 239 ****************************************************************; 227 data tmp;240 data rate; 228 241 set aarate; 229 242 if %cross1%=-1 then %cross1%=.; *Recode the statewide totals.; … … 231 244 232 245 if (count>0) then do; 233 rateper=(aarate* 10000);246 rateper=(aarate*&MULTIPLIER.); 234 247 rate_se=sqrt(aarate_var); 235 stderr=(rate_se* 10000);248 stderr=(rate_se*&MULTIPLIER.); 236 249 end; 237 250 if (count<=0) then do; … … 239 252 240 253 rateper=0; 241 stderr=sqrt((3/popcount)*(1-(3/popcount))/popcount)* 10000;254 stderr=sqrt((3/popcount)*(1-(3/popcount))/popcount)*&MULTIPLIER.; 242 255 end; 243 256 t1=(rateper-(1.96*stderr)); … … 256 269 * (xslt\html\query\module\result\ResultPage.xslt, ...Values.xslt ; 257 270 *****************************************************************; 271 258 272 if count>0 then do; 259 273 rse=(stderr/rateper); 260 redflag=put(' -', $14.);261 if rse>.3 then redflag=put('Unstable', $1 4.);262 if rse>.5 then redflag=put('Very Unstable', $1 4.);263 if stderr=. then redflag=put('Unstable', $1 4.);274 redflag=put(' ', $12.); 275 if rse>.3 then redflag=put('Unstable', $12.); 276 if rse>.5 then redflag=put('Very Unstable', $12.); 277 if stderr=. then redflag=put('Unstable', $12.); 264 278 end; 265 if count<=0 then redflag=put('Unstable', $1 4.); *no variance, n=0, rse=div by zero;279 if count<=0 then redflag=put('Unstable', $12.); *no variance, n=0, rse=div by zero; 266 280 run; 267 281 … … 279 293 *******************************************************************; 280 294 data tmp; 281 set tmp;295 set rate; 282 296 if ((0<n<4) and (popcount<5000)) then do; 283 297 n = .A; … … 285 299 LL = put('**', 8.0); 286 300 UL = put('**', 8.0); 301 redflag = put('Suppressed', $12.); 287 302 end; 288 303 289 304 proc print data=tmp noobs; title2 '11. TMP - final dataset to pass to IBIS View app'; 290 305 run; -
adopters/nm/trunk/src/main/backend_qModules/3.0/_EPHT/hidd/NM_RateAA10K_GE35.def
r23695 r24441 15 15 OPTION SPOOL; 16 16 17 %LET MULTIPLIER=10000; 18 %LET STDVAR=agepop; 19 %LET NCAT=11; 17 20 ************************** 1. TMP ******************************; 18 21 * The dataset 'tmp' is the numerator dataset that has been read ; … … 21 24 * The variable "x" must be in the dataset, it is set equal to 1.; 22 25 ****************************************************************; 26 27 Data tmp; 28 set tmp; 29 agepop=agepop_a; 30 run; 31 23 32 proc summary data=tmp; 24 var x; 25 class agepop_a%cross1%33 var x; 34 class &STDVAR. %cross1% 26 35 ?cross2? %cross2% 27 36 ; 28 output out=tmp sum=count; 29 proc sort data=tmp; by agepop_a %cross1% 30 ?cross2? %cross2% 31 ; run; 32 /* 37 output out=tmp (drop=_TYPE_ _FREQ_) 38 sum=count; 39 proc sort data=tmp; 40 by %cross1% %cross2% &STDVAR.; 41 run; 42 33 43 proc print data=tmp noobs; 34 title1 '---------------------------------';35 title2 '1. TMP - numerator dataset';36 run;37 */44 title1 '---------------------------------'; 45 title2 '1. TMP - numerator dataset '; 46 title3 '---------------------------------'; 47 run; 38 48 ********************** 2. %data_frame% *************************; 39 49 * %data_frame% is a dataset created by IBIS-Q. It consists of ; … … 46 56 retain count 0; 47 57 do 48 agepop_a = 1 to 11by 1 ;58 &STDVAR. = 1 to &NCAT. by 1 ; 49 59 output; 50 60 end; … … 81 91 by %cross1% 82 92 ?cross2? %cross2% 83 agepop_a;93 &STDVAR. ; 84 94 run; 85 /* 86 proc print data=new_frame noobs; title2 'new_frame, sorted with nodupkey'; run; 87 proc sort data=tmp; by agepop_a %cross1% 88 ?cross2? %cross2% 89 ; run; 90 */ 91 proc sort data=tmp; by %cross1% %cross2% agepop_a; run; 92 data newtmp; 93 merge new_frame tmp; *must list frame dataset first, then tmp; 94 by %cross1% %cross2% agepop_a; 95 /* proc print data=new_frame noobs; title2 'new_frame, sorted with nodupkey'; run; 96 proc sort data=tmp; by %cross1% %cross2% &STDVAR.; run; 97 */ 98 99 proc sort data=tmp out=sorted; 100 by %cross1% %cross2% &STDVAR; run; 101 data newtmp; 102 merge new_frame sorted; * tmp, must list frame dataset first, then sorted tmp; 103 by %cross1% %cross2% &STDVAR.; 95 104 drop _TYPE_ _FREQ_ ; 96 105 run; 106 97 107 /* 98 108 proc print data=newtmp noobs; … … 109 119 * cross1 and cross2 totals to -1. ; 110 120 ****************************************************************; 111 data poptmp; format agepop %popcross1% %popcross2% 8.; set poptmp; run; 121 data poptmp; format &STDVAR %popcross1% %popcross2% 8.; 122 set poptmp; run; 112 123 proc summary data=poptmp; 113 var popcount; 114 class agepop %popcross1% %popcross2%; 115 output out=pop sum=popcount; 124 var popcount; 125 class &STDVAR. %popcross1% %popcross2%; 126 output out=pop (drop=_TYPE_ _FREQ_) 127 sum=popcount; 116 128 run; 117 129 data pop; 118 set pop;119 drop _TYPE_ _FREQ_; 120 121 130 set pop; 131 132 proc print data=pop noobs; 133 title2 '3. POP - denominator dataset'; 122 134 run; 123 135 … … 131 143 select tmp.*, pop.* 132 144 from tmp left join pop 133 on tmp. agepop_a=pop.agepop145 on tmp.&STDVAR.=pop.&STDVAR. 134 146 ?popcross1? and tmp.%cross1%=pop.%popcross1% 135 147 ?popcross2? and tmp.%cross2%=pop.%popcross2% … … 138 150 data numbers; 139 151 set numbers; 140 if agepop_a^=.; *get rid of total rows to stop doubling from pop proc summary;152 if &STDVAR.^=.; *get rid of total rows to stop doubling from pop proc summary; 141 153 if %cross1%=. then %cross1%=-1; 142 ?cross2? if %cross2%=. then %cross2%=-1; 143 /* 154 ?cross2? if %cross2%=. then %cross2%=-1; 155 144 156 proc print data=numbers noobs; 145 157 title2 '4. NUMBERS'; 146 158 title3 ' '; 147 159 run; 148 */ 160 149 161 ************************ 5. STDWGT *****************************; 150 162 * Select the appropriate records from the stdwgts datafile. ; … … 167 179 *pop libname is set in .cfg file with the saspop statement; 168 180 if (stdvar='agepopGE35'); *stdvar name is case-sensitive; 169 keep agepop stdwgt; 170 run; 181 keep &STDVAR. stdwgt; 182 run; 183 /* 171 184 proc print data=stdwgt noobs; 172 185 title2 '5. STDWGT- std. pop. weights for direct age-adjustment'; 173 run; 186 run; 187 */ 174 188 ******************** 6. NUMBERS2 *******************************; 175 189 * Adds the standard population weights to the numerator and ; … … 181 195 select numbers.*, stdwgt.stdwgt 182 196 from numbers left join stdwgt 183 on numbers. agepop_a=stdwgt.agepop197 on numbers.&STDVAR.=stdwgt.&STDVAR. 184 198 ; 185 199 quit; 186 /* 200 187 201 proc print data=numbers2 noobs; 188 202 title2 '6. NUMBERS2- Standard POP wgts merged onto dataset'; 189 203 run; 190 */ 204 191 205 *********************** 7. AGESPECIFIC *************************; 192 206 * Calculate age-specific rates & cross-products ; … … 208 222 *****************************************************************; 209 223 proc summary data=agespecific nway; 210 var ratewgt rate_var count popcount; 211 class %cross1% %cross2%; 212 output out=aarate sum(ratewgt rate_var count popcount)=aarate aarate_var count popcount; 213 run; 214 data aarate; 215 set aarate; 216 drop _TYPE_ _FREQ_ ; 217 run; 218 proc sort data=aarate; by %cross1% %cross2%; run; 219 /* 224 var ratewgt rate_var count popcount; 225 class %cross1% %cross2%; 226 output out=aarate (drop=_TYPE_ _FREQ_ ) 227 sum(ratewgt rate_var count popcount)=aarate aarate_var count popcount; 228 run; 229 proc sort data=aarate; by %cross1% %cross2%; run; 230 220 231 proc print data=aarate noobs; 221 title2 '8. AARATE - summed across weighted agepop cross-products to get AA rate and';232 title2 "8. AARATE - summed across weighted &STDVAR. cross-products to get AA rate and"; 222 233 title3 'rate variance within each cross-by var'; 223 run; 224 */ 234 run; 235 225 236 ******************* 9. TMP *************************************; 226 237 * Almost final IBIS output dataset. ; … … 228 239 * coded back to '.' after this step. ; 229 240 ****************************************************************; 230 data tmp;241 data rate; 231 242 set aarate; 232 243 if %cross1%=-1 then %cross1%=.; *Recode the statewide totals.; … … 234 245 235 246 if (count>0) then do; 236 rateper=(aarate* 10000);247 rateper=(aarate*&MULTIPLIER.); 237 248 rate_se=sqrt(aarate_var); 238 stderr=(rate_se* 10000);249 stderr=(rate_se*&MULTIPLIER.); 239 250 end; 240 251 if (count<=0) then do; … … 242 253 243 254 rateper=0; 244 stderr=sqrt((3/popcount)*(1-(3/popcount))/popcount)* 10000;255 stderr=sqrt((3/popcount)*(1-(3/popcount))/popcount)*&MULTIPLIER.; 245 256 end; 246 257 t1=(rateper-(1.96*stderr)); … … 259 270 * (xslt\html\query\module\result\ResultPage.xslt, ...Values.xslt ; 260 271 *****************************************************************; 272 261 273 if count>0 then do; 262 274 rse=(stderr/rateper); 263 redflag=put(' -', $14.);264 if rse>.3 then redflag=put('Unstable', $1 4.);265 if rse>.5 then redflag=put('Very Unstable', $1 4.);266 if stderr=. then redflag=put('Unstable', $1 4.);275 redflag=put(' ', $12.); 276 if rse>.3 then redflag=put('Unstable', $12.); 277 if rse>.5 then redflag=put('Very Unstable', $12.); 278 if stderr=. then redflag=put('Unstable', $12.); 267 279 end; 268 if count<=0 then redflag=put('Unstable', $1 4.); *no variance, n=0, rse=div by zero;280 if count<=0 then redflag=put('Unstable', $12.); 269 281 run; 270 282 … … 282 294 *******************************************************************; 283 295 data tmp; 284 set tmp;285 if ((0<n<4) and (popcount<5000)) then do;296 set rate; 297 if ((0<n<4) and (popcount<5000)) then do; 286 298 n = .A; 287 299 rateper = .A; 288 300 LL = put('**', 8.0); 289 301 UL = put('**', 8.0); 290 end; 291 302 redflag = put('Suppressed', $12.); 303 end; 304 292 305 proc print data=tmp noobs; title2 '11. TMP - final dataset to pass to IBIS View app'; 293 306 run; -
adopters/nm/trunk/src/main/backend_qModules/3.0/_EPHT/hidd/_HIDD.cfg
r24328 r24441 19 19 # 1/24/2017 Brian(brd)Current data through 2015 20 20 # 8/13/2021 Brian add 2020 data 21 # 1/3/2022 BW, modernize with V3 Stability constructs 21 22 # 22 23 #============================================================================== … … 105 106 4 hispeth HispEth hisp Ethnicity num 0 8 106 107 4 biology EthHerit dohraceth Decendancy num 0 8 107 4 NMDOHRaceEth NMDOHEthHerit null NMRace&Eth num 0 8108 #4 NMDOHRaceEth NMDOHEthHerit null NMRace&Eth num 0 8 108 109 109 110 5 null EPHTIndicatorProxy null EPHT&Indicator&Proxy num 10 3
Note: See TracChangeset
for help on using the changeset viewer.