Changeset 24441 in main


Ignore:
Timestamp:
01/10/22 16:16:06 (4 months ago)
Author:
LoisHaggard_STG
Message:

NM EPHT Backend qModules30 - update to hidd folder

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
    12f label Count
    23f type special
    34#########################################
    45--------BoNdArY--------
    5 1 script
    6 OPTIONS MPRINT MLOGIC SYMBOLGEN;
     61 script NODATE PAGESIZE=4000 NODATE PAGESIZE=4000;
    77OPTION SPOOL;
    88
     
    1212         proc means data=tmp noprint;
    1313           by sasadmitdate;
    14 
    1514                  var x;
    1615                  Class admit_month %cross1%
     
    2221           by admit_month;
    2322
    24          proc means data=day sum nway; * mean max min Noprint;
    25          * by admit_year admit_month;
     23         proc means data=day nway Noprint;
     24         * by month;
    2625                  var daily;
    2726                  Class %cross1%
    2827                ?cross2? %cross2% ;
    2928                  ;
    30 
    3129                  output out=tmp 
    3230                         max=Number;
    3331           Run;
    34            
     32         proc sort data=tmp out=sorted;
     33           by admit_month %cross1%
     34                  ?cross2? %cross2%
     35                  ;
     36           run;
    3537         proc print;
    36                   title "NEPHT Daily Asthma NCDM Trial, 2015";
     38                  Title1 '/*******************************/';
     39                  title2 '1. tmp - Daily maximum by month  ';
     40                  Title3 '/*******************************/';
     41                  title "";
    3742           run;
    3843
    39  
    4044/*The Count measure does not need the population
    4145  dataset. The following code, through the end of
    4246  the macro, is used to compute the RSE for the
    4347  data stability indicator.                     */
    44  
    45 %let popflag=0;
     48
     49data frame;
     50 set df_%cross1%%cross2%;
     51proc sort data=frame;
     52  by %cross1%
     53         ?cross2? %cross2%
     54         ;
     55proc print data=frame noobs;
     56         Title1 '/*******************************/';
     57         title2 '2.         Data Frame            ';
     58         Title3 '/*******************************/';
     59  run;
     60
     61data  tmp;
     62merge frame sorted;
     63   by %cross1%
     64          ?cross2? %cross2%
     65          ;
     66   run;
     67proc  print data=tmp noobs;
     68          title2 'Merged Frame & Numerator Dataset ';
     69   run;
     70
     71
    4672%let flag=0;
    47 %let pflag=0;
    4873?popcross1? %let flag=1;
    49 ?popcross1? %let pflag=1;
    5074?popcross2? %let flag=1;
    51 ?popcross2? %let pflag=2;
    5275?popcross1? ?popcross2? %let flag=2;
    5376
    5477%macro popcross;
    5578
    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;
    116126%mend;
    117 
    118127%popcross;
    119128
    120129
    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
     132proc print data=rate;
     133         Title1 '/*******************************/';
     134         title2 '2.    RATE DATA for STABILITY    ';
     135
     136data  tmp;
    141137  set rate;
    142138
    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.);
    174174run;
     175
     176/*******************************************************/
     177/*       New Mexico Small Numbers Rule                 */
     178/*******************************************************/
     179
     180data  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
     194proc print data=tmp; title2 ''; run;
     195         Title1 '/************************************************/';
     196         title2 '2. Final RATE DATA for STABILITY to IBIS View app ';
    175197
    176198/**********************************************/
     
    191213
    192214--------BoNdArY--------
    193 f out_variable XMLNumAsthma
     215f out_variable XMLNum
    194216#################################################
    195217# definition for output file
    196 f xml_out_map_file XMLNumAsthma.map
     218f xml_out_map_file XMLNum.map
    197219--------BoNdArY--------
    198220f 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
    12f label Count
    23f type special
    34#########################################
    45--------BoNdArY--------
    5 1 script
    6 OPTIONS MPRINT MLOGIC SYMBOLGEN;
     61 script NODATE PAGESIZE=4000 NODATE PAGESIZE=4000;
    77OPTION SPOOL;
    88
    99         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;
    1414
    1515                  var x;
    16                   Class admit_month
    17                   %cross1%
     16                  Class admit_month  %cross1%
    1817                ?cross2? %cross2% ;
    1918                  ;
    20                   output out=asthmaday  sum=asthmaadmits;
    21 
    22          Proc sort data=asthmaday;
     19                  output out=day  sum=daily;
     20
     21         Proc sort data=day;
    2322           by admit_month;
    2423
    25          proc means data=asthmaday sum nway; * mean max min Noprint;
     24         proc means data=day sum nway; * mean max min Noprint;
    2625         * by admit_year admit_month;
    2726
    28                   var asthmaadmits;
    29 
     27                  var daily;
    3028                  Class %cross1%
    3129                ?cross2? %cross2% ;
    32                   ;             
    33                   output out=tmp 
     30                  ;
     31                  output out=tmp
    3432                         mean=Number;
    35            Run;
    36        
     33           Run;
     34
     35         proc sort data=tmp out=sorted;
     36           by %cross1%
     37                  ?cross2? %cross2%
     38                  ;
     39           run;
    3740         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 '/*******************************/';
    4044           run;
    4145
    42  
    4346/*The Count measure does not need the population
    4447  dataset. The following code, through the end of
    4548  the macro, is used to compute the RSE for the
    4649  data stability indicator.                     */
    47  
    48 %let popflag=0;
     50 
     51data frame;
     52 set df_%cross1%%cross2%;
     53proc sort data=frame;
     54  by %cross1%
     55         ?cross2? %cross2%
     56         ;
     57proc print data=frame noobs;
     58         Title1 '/*******************************/';
     59         title2 '2.         Data Frame            ';
     60         Title3 '/*******************************/';
     61  run;
     62
     63data  tmp;
     64merge frame sorted;
     65   by %cross1%
     66          ?cross2? %cross2%
     67          ;
     68   run;
     69proc  print data=tmp noobs;
     70          title2 'Merged Frame & Numerator Dataset ';
     71   run;
     72
     73
    4974%let flag=0;
    50 %let pflag=0;
    5175?popcross1? %let flag=1;
    52 ?popcross1? %let pflag=1;
    5376?popcross2? %let flag=1;
    54 ?popcross2? %let pflag=2;
    5577?popcross1? ?popcross2? %let flag=2;
    5678
    5779%macro popcross;
    5880
    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;
    119125%mend;
    120 
    121126%popcross;
    122127
    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
     130proc print data=rate;
     131         Title1 '/*******************************/';
     132         title2 '2.    RATE DATA for STABILITY    ';
     133
     134data  tmp;
    144135  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.);
    177171run;
     172
     173/*******************************************************/
     174/*       New Mexico Small Numbers Rule                 */
     175/*******************************************************/
     176
     177data  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
     191proc print data=tmp; title2 ''; run;
     192         Title1 '/************************************************/';
     193         title2 '2. Final RATE DATA for STABILITY to IBIS View app ';
    178194
    179195/**********************************************/
     
    194210
    195211--------BoNdArY--------
    196 f out_variable XMLNumAsthma
     212f out_variable Num
    197213#################################################
    198214# definition for output file
    199 f xml_out_map_file XMLNumAsthma.map
     215f xml_out_map_file XMLNum.map
    200216--------BoNdArY--------
    201217f out_detail lbl_not_used__see_xml_out_map_file
    202   n 12.1
     218  n 12.0
    203219  redflag 12.0
    204220--------BoNdArY--------
  • adopters/nm/trunk/src/main/backend_qModules/3.0/_EPHT/hidd/CountDayMinNM.def

    r20797 r24441  
     1#CountDayMaxNM.def -- HIDD Flavor with Sasadmidate
    12f label Count
    23f type special
    34#########################################
    45--------BoNdArY--------
    5 1 script
    6 OPTIONS MPRINT MLOGIC SYMBOLGEN;
     61 script NODATE PAGESIZE=4000 NODATE PAGESIZE=4000;
    77OPTION SPOOL;
    88
     9    /*    year removed from steps and month removed from second step  */
     10       
    911         Proc sort data=tmp;
    1012           by sasadmitdate;
     
    1214         proc means data=tmp nway noprint;
    1315           by sasadmitdate;
    14 
    1516                  var x;
    16                   Class admit_month %cross1%
     17                  Class admit_month 
     18                        %cross1%
    1719                ?cross2? %cross2% ;
    18                   ;             
     20                  ;
    1921                  output out=day  sum=daily;
    2022
     
    2224           by admit_month;
    2325
    24          proc means data=day sum nway; * mean max min Noprint;
    25          * by admit_year admit_month;
     26         proc means data=day sum nway Noprint;
     27         * by month;
    2628                  var daily;
    2729                  Class %cross1%
    28                 ?cross2? %cross2%
    29                                 ;
    30 
    31                   output out=tmp 
     30                ?cross2? %cross2% ;
     31                  ;
     32                  output out=tmp
    3233                         min=Number;
    33            Run;
     34           Run;
     35         proc sort data=tmp out=sorted;
     36           by %cross1%
     37                  ?cross2? %cross2%
     38                  ;
     39           run;
    3440         proc print;
    35                   title "data tmp - Daily Minimum";
     41                  Title1 '/*******************************/';
     42                  title2 '1. tmp - Daily maximum by month  ';
     43                  Title3 '/*******************************/';
     44                  title "";
    3645           run;
    37  
     46
    3847/*The Count measure does not need the population
    3948  dataset. The following code, through the end of
    4049  the macro, is used to compute the RSE for the
    4150  data stability indicator.                     */
    42  
    43 %let popflag=0;
     51
     52data frame;
     53 set df_%cross1%%cross2%;
     54proc sort data=frame;
     55  by %cross1%
     56         ?cross2? %cross2%
     57         ;
     58proc print data=frame noobs;
     59         Title1 '/*******************************/';
     60         title2 '2.         Data Frame            ';
     61         Title3 '/*******************************/';
     62  run;
     63
     64data  tmp;
     65merge frame sorted;
     66   by %cross1%
     67          ?cross2? %cross2%
     68          ;
     69   run;
     70proc  print data=tmp noobs;
     71          title2 'Merged Frame & Numerator Dataset ';
     72   run;
     73
     74
    4475%let flag=0;
    45 %let pflag=0;
    4676?popcross1? %let flag=1;
    47 ?popcross1? %let pflag=1;
    4877?popcross2? %let flag=1;
    49 ?popcross2? %let pflag=2;
    5078?popcross1? ?popcross2? %let flag=2;
    5179
    5280%macro popcross;
    5381
    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;
    114130%mend;
    115 
    116131%popcross;
    117132
    118133
    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
     136proc print data=rate;
     137         Title1 '/*******************************/';
     138         title2 '2.    RATE DATA for STABILITY    ';
     139
     140data  tmp;
    139141  set rate;
    140142
    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.);
    172178run;
     179
     180/*******************************************************/
     181/*       New Mexico Small Numbers Rule                 */
     182/*******************************************************/
     183
     184data  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
     198proc print data=tmp; title2 ''; run;
     199         Title1 '/************************************************/';
     200         title2 '2. Final RATE DATA for STABILITY to IBIS View app ';
    173201
    174202/**********************************************/
     
    189217
    190218--------BoNdArY--------
    191 f out_variable XMLNumAsthma
     219f out_variable XMLNum
    192220#################################################
    193221# definition for output file
    194 f xml_out_map_file XMLNumAsthma.map
     222f xml_out_map_file XMLNum.map
    195223--------BoNdArY--------
    196224f 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
    22f type special
    3 #f data_where
    4 #f pop_where 1<=region<=5
    53#########################################
    64--------BoNdArY--------
    751 script
    8 OPTIONS MPRINT MLOGIC SYMBOLGEN;
     6OPTIONS MPRINT MLOGIC SYMBOLGEN NONUMBER NODATE PAGESIZE=4000;
    97OPTION SPOOL;
     8
     9%LET MULTIPLIER=100000;
     10
     11**************** 1. Numerator data, TMP *******;
    1012
    1113proc summary data=tmp;
    1214 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
     21proc sort data=tmp out=sorted; by %cross1%
     22         ?cross2? %cross2%
     23         ;
     24  run;
     25
     26proc 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
    2058%let flag=0;
    21 %let pflag=0;
    2259?popcross1? %let flag=1;
    23 ?popcross1? %let pflag=1;
    2460?popcross2? %let flag=1;
    25 ?popcross2? %let pflag=2;
    26 
    2761?popcross1? ?popcross2? %let flag=2;
    2862
     
    3064
    3165%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;
    4481%end;
    4582
    4683%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  ';
    52111  run;
    53112        proc sql;
    54113            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
    60116            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 as
    81             select tmp.*, pop.*,
    82             coalesce (tmp.%cross1%, pop.%popcross1%),
    83             coalesce (tmp.%cross2%, pop.%popcross2%)
    84             from pop full join tmp
    85             on
    86 
    87117            tmp.%cross1%=pop.%popcross1% and
    88118            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;
    96121%mend;
    97122%popcross;
    98123
    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;
     124proc print data=rate;
     125         title2 '3.       Rate Ready Data          ';
     126  run;
     127
     128
     129******************  Rates data.  ***************;
     130
     131data  rates;
    119132  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;
    148166run;
    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
     168proc print data=rates;
     169         title2 '4.          Rates Data            ';
     170  run;
     171
     172
     173*********  New Mexico Small Numbers Rule  ******;
     174
     175data  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
     186proc print data=tmp;
     187         title2 '5.          Final Data            '; run;
    161188
    162189--------BoNdArY--------
     
    169196  n 15.0
    170197  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--------
     2031 suppressed_variables 5
     204  rateper
    177205  n
    178   rateper
    179   LCL
    180   UCL
    181 --------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
    22f type special
    3 #f data_where
    4 #f pop_where 1<=region<=5
    53#########################################
    64--------BoNdArY--------
    751 script
    8 OPTIONS MPRINT MLOGIC SYMBOLGEN;
     6OPTIONS MPRINT MLOGIC SYMBOLGEN NONUMBER NODATE PAGESIZE=4000;
    97OPTION SPOOL;
     8
     9%LET MULTIPLIER=10000;
     10
     11**************** 1. Numerator data, TMP *******;
    1012
    1113proc summary data=tmp;
    1214 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
     21proc sort data=tmp out=sorted;
     22  by %cross1%
     23         ?cross2? %cross2%
     24         ;
     25  run;
     26
     27proc 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
    2059%let flag=0;
    21 %let pflag=0;
    2260?popcross1? %let flag=1;
    23 ?popcross1? %let pflag=1;
    2461?popcross2? %let flag=1;
    25 ?popcross2? %let pflag=2;
    26 
    2762?popcross1? ?popcross2? %let flag=2;
    2863
     
    3065
    3166%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;
    4482%end;
    4583
    4684%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  ';
    52112  run;
    53113        proc sql;
    54114            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
    60117            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 as
    81             select tmp.*, pop.*,
    82             coalesce (tmp.%cross1%, pop.%popcross1%),
    83             coalesce (tmp.%cross2%, pop.%popcross2%)
    84             from pop full join tmp
    85             on
    86 
    87118            tmp.%cross1%=pop.%popcross1% and
    88119            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;
    96122%mend;
    97123%popcross;
    98124
    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;
     125proc print data=rate;
     126         title2 '3.       Rate Ready Data          ';
     127  run;
     128
     129
     130******************  Rates data.  ***************;
     131
     132data  rates;
    119133  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;
    148167run;
    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
     169proc print data=rates;
     170         title2 '4.          Rates Data            ';
     171  run;
     172
     173
     174*********  New Mexico Small Numbers Rule  ******;
     175
     176data  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
     187proc print data=tmp;
     188         title2 '5.          Final Data            '; run;
    161189
    162190--------BoNdArY--------
     
    169197  n 15.0
    170198  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--------
     2041 suppressed_variables 5
     205  rateper
    177206  n
    178   rateper
    179   LCL
    180   UCL
    181 --------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  
    1515OPTION SPOOL;
    1616
     17        %LET MULTIPLIER=100000;
     18        %LET STDVAR=agepop;
     19        %LET NCAT=11;
    1720 ************************** 1. TMP ******************************;
    1821 * The dataset 'tmp' is the numerator dataset that has been read ;
     
    2124 * The variable "x" must be in the dataset, it is set equal to 1.;
    2225 ****************************************************************;
     26 Data   tmp;
     27        set tmp;
     28                agepop=agepop_a;
     29         run;
     30
    2331        proc summary data=tmp;
    2432                var x;
    25                 class agepop_a %cross1%
     33                class  &STDVAR. %cross1%
    2634                ?cross2? %cross2%
    2735                ;
    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.;
    3140                ; run;
    3241        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;
    3646
    3747 ********************** 2. %data_frame% *************************;
     
    4353 ****************************************************************;
    4454        data agepop_frame;
    45                 retain count 0;
    46                 do
    47                         agepop_a= 1 to 11 by 1 ;
     55                 retain count 0;
     56                 do
     57                        &STDVAR. = 1 to &NCAT. by 1 ;
    4858                        output;
    49                 end;
     59                 end;
    5060        run;
    5161        *************************************************************************************;
     
    5565        * then crosses by sex), there will be a total row for the cross1 and cross2 values.  ;
    5666        * 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.;
    5868        *************************************************************************************;
     69
    5970        data crosstotalframe;
    60                 retain count 0;
    61                 do
     71                 retain count 0;
     72                 do
    6273                        %cross1%=.;
    6374                        ?cross2? %cross2%=.;
    6475                        output;
    65                 end;
    66         run;
     76                 end;
     77        run;
     78
    6779        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;
    7287        proc sql;
    7388                create table new_frame as
     
    7691        quit;
    7792        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_ ;
    88107        run;
    89108
    90109        proc print data=newtmp noobs;
    91                 title2 '2. NEWTMP, after frame merged with tmp';
     110                 title2 '2. NEWTMP, after frame merged with tmp';
    92111                run;
    93112        data tmp;
    94                 set newtmp;
     113         set newtmp;
    95114        run;
    96115
     
    100119 * cross1 and cross2 totals to -1.                               ;
    101120 ****************************************************************;
    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; 
    103125        proc summary data=poptmp;
    104126                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;
    107129        run;
    108130        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
    115139 *********************** 4. NUMBERS *****************************;
    116140 * Join tmp, pop.                                                ;
    117141 * -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".  ;
    119145 ****************************************************************;
    120146        proc sql;
     
    122148                select tmp.*, pop.*
    123149                from tmp left join pop
    124                 on tmp.agepop_a=pop.agepop
     150                on tmp.&STDVAR. = pop.&STDVAR.
    125151                ?popcross1? and tmp.%cross1%=pop.%popcross1% 
    126152                ?popcross2? and tmp.%cross2%=pop.%popcross2%
     
    129155        data numbers;
    130156                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;
    132158                if %cross1%=. then %cross1%=-1;
    133159                ?cross2? if %cross2%=. then %cross2%=-1;
    134160        proc print data=numbers noobs;
    135                 title2 '4. NUMBERS';
    136                 title3 ' ';
     161                 title2 '4.           NUMBERS             ';
     162                 title3 '---------------------------------';
    137163        run;
    138164
    139165 ************************ 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                                                                                                                           
    153179 ****************************************************************;
    154180        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;
    161188        proc print data=stdwgt noobs; 
    162189                title2 '5. STDWGT- std. pop. weights for direct age-adjustment';
     
    171198                select numbers.*, stdwgt.stdwgt
    172199                from numbers left join stdwgt
    173                 on numbers.agepop=stdwgt.agepop
     200                on numbers.&STDVAR.=stdwgt.&STDVAR.
    174201                ;
    175202        quit;
     
    197224 *****************************************************************;
    198225        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;
    208236        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";
    210238                title3 'rate variance within each cross-by var';
    211239      run;
     
    216244 * coded back to '.' after this step.                            ;
    217245 ****************************************************************;
    218         data tmp;
     246
     247        data rate;
    219248                set aarate;
    220249                if %cross1%=-1 then %cross1%=.;         *Recode the statewide totals.;
     
    222251               
    223252                if (count>0) then do;
    224                                 rateper=(aarate*100000);
     253                                rateper=(aarate*&MULTIPLIER.);
    225254                                rate_se=sqrt(aarate_var);
    226                                 stderr=(rate_se*100000);
     255                                stderr=(rate_se*&MULTIPLIER.);
    227256                        end;
    228257                if (count<=0) then do;
     
    230259
    231260                                rateper=0;
    232                                 stderr=sqrt((3/popcount)*(1-(3/popcount))/popcount)*100000;
     261                                stderr=sqrt((3/popcount)*(1-(3/popcount))/popcount)*&MULTIPLIER.;
    233262                        end;
    234263                t1=(rateper-(1.96*stderr));
     
    247276 * (xslt\html\query\module\result\ResultPage.xslt, ...Values.xslt ;
    248277 *****************************************************************;
     278
    249279                if count>0 then do;
    250280                        rse=(stderr/rateper);
    251                         redflag=put('-', $14.);
    252                         if rse>.3 then redflag=put('Unstable', $14.);
    253                         if rse>.5 then redflag=put('Very Unstable', $14.);
    254                         if stderr=. then redflag=put('Unstable', $14.);
     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.);
    255285                end;
    256                 if count<=0 then redflag=put('Unstable', $14.);  *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;
    257287        run;
    258288
     
    269299 * code at the end of this file to work.                            ;
    270300 *******************************************************************;
     301
    271302        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;
    274305                        n = .A;
    275306                        rateper = .A;
    276307                        LL = put('**', 8.0);
    277308                        UL = put('**', 8.0);
     309                        *only 1 val attr allowed, over-write redflag if suppressed;
     310                        redflag = put('Suppressed', $12.);
    278311                end;
    279312        proc print data=tmp noobs;  title2 '11. TMP - final dataset to pass to IBIS View app';
     
    281314
    282315--------BoNdArY--------
    283 f out_variable rateper
     316f out_variable
    284317# definition for output file
    285 f xml_out_map_file XMLRate100KNDLCLUCL.map
     318f xml_out_map_file XMLRate10KNDLCLUCL.map
    286319--------BoNdArY--------
    287320f 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  
    1515OPTION SPOOL;
    1616
     17        %LET MULTIPLIER=10000;
     18        %LET STDVAR=agepop;
     19        %LET NCAT=11;
    1720 ************************** 1. TMP ******************************;
    1821 * The dataset 'tmp' is the numerator dataset that has been read ;
    1922 * 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
    2333        proc summary data=tmp;
    2434                var x;
    25                 class agepop_a %cross1%
     35                class  &STDVAR. %cross1%
    2636                ?cross2? %cross2%
    2737                ;
    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.;
    3142                ; run;
    3243        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;
    3648
    3749 ********************** 2. %data_frame% *************************;
     
    4355 ****************************************************************;
    4456        data agepop_frame;
    45                 retain count 0;
    46                 do
    47                         agepop_a= 1 to 11 by 1 ;
     57                 retain count 0;
     58                 do
     59                        &STDVAR. = 1 to &NCAT. by 1 ;
    4860                        output;
    49                 end;
     61                 end;
    5062        run;
    5163        *************************************************************************************;
     
    5567        * then crosses by sex), there will be a total row for the cross1 and cross2 values.  ;
    5668        * 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.;
    5870        *************************************************************************************;
     71
    5972        data crosstotalframe;
    60                 retain count 0;
    61                 do
     73                 retain count 0;
     74                 do
    6275                        %cross1%=.;
    6376                        ?cross2? %cross2%=.;
    6477                        output;
    65                 end;
    66         run;
     78                 end;
     79        run;
     80
    6781        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;
    7289        proc sql;
    7390                create table new_frame as
     
    7693        quit;
    7794        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_ ;
    88109        run;
    89110
    90111        proc print data=newtmp noobs;
    91                 title2 '2. NEWTMP, after frame merged with tmp';
     112                 title2 '2. NEWTMP, after frame merged with tmp';
    92113                run;
    93114        data tmp;
    94                 set newtmp;
     115         set newtmp;
    95116        run;
    96117
     
    100121 * cross1 and cross2 totals to -1.                               ;
    101122 ****************************************************************;
    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; 
    103127        proc summary data=poptmp;
    104128                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;
    107131        run;
    108132        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
    115141 *********************** 4. NUMBERS *****************************;
    116142 * Join tmp, pop.                                                ;
    117143 * -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".  ;
    119147 ****************************************************************;
    120148        proc sql;
     
    122150                select tmp.*, pop.*
    123151                from tmp left join pop
    124                 on tmp.agepop_a=pop.agepop
     152                on tmp.&STDVAR. = pop.&STDVAR.
    125153                ?popcross1? and tmp.%cross1%=pop.%popcross1% 
    126154                ?popcross2? and tmp.%cross2%=pop.%popcross2%
     
    129157        data numbers;
    130158                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;
    132160                if %cross1%=. then %cross1%=-1;
    133161                ?cross2? if %cross2%=. then %cross2%=-1;
    134162        proc print data=numbers noobs;
    135                 title2 '4. NUMBERS';
    136                 title3 ' ';
     163                 title2 '4.           NUMBERS             ';
     164                 title3 '---------------------------------';
    137165        run;
    138166
    139167 ************************ 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.                             ;
    153176 ****************************************************************;
    154177        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;
    161185        proc print data=stdwgt noobs; 
    162186                title2 '5. STDWGT- std. pop. weights for direct age-adjustment';
     
    171195                select numbers.*, stdwgt.stdwgt
    172196                from numbers left join stdwgt
    173                 on numbers.agepop=stdwgt.agepop
     197                on numbers.&STDVAR.=stdwgt.&STDVAR.
    174198                ;
    175199        quit;
     
    197221 *****************************************************************;
    198222        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;
    208229        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";
    210231                title3 'rate variance within each cross-by var';
    211232      run;
     
    216237 * coded back to '.' after this step.                            ;
    217238 ****************************************************************;
    218         data tmp;
     239
     240        data rate;
    219241                set aarate;
    220242                if %cross1%=-1 then %cross1%=.;         *Recode the statewide totals.;
     
    222244               
    223245                if (count>0) then do;
    224                                 rateper=(aarate*10000);
     246                                rateper=(aarate*&MULTIPLIER.);
    225247                                rate_se=sqrt(aarate_var);
    226                                 stderr=(rate_se*10000);
     248                                stderr=(rate_se*&MULTIPLIER.);
    227249                        end;
    228250                if (count<=0) then do;
     
    230252
    231253                                rateper=0;
    232                                 stderr=sqrt((3/popcount)*(1-(3/popcount))/popcount)*10000;
     254                                stderr=sqrt((3/popcount)*(1-(3/popcount))/popcount)*&MULTIPLIER.;
    233255                        end;
    234256                t1=(rateper-(1.96*stderr));
     
    247269 * (xslt\html\query\module\result\ResultPage.xslt, ...Values.xslt ;
    248270 *****************************************************************;
     271
    249272                if count>0 then do;
    250273                        rse=(stderr/rateper);
    251                         redflag=put('-', $14.);
    252                         if rse>.3 then redflag=put('Unstable', $14.);
    253                         if rse>.5 then redflag=put('Very Unstable', $14.);
    254                         if stderr=. then redflag=put('Unstable', $14.);
     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.);
    255278                end;
    256                 if count<=0 then redflag=put('Unstable', $14.);  *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;
    257280        run;
    258281
     
    269292 * code at the end of this file to work.                            ;
    270293 *******************************************************************;
     294
    271295        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;
    274298                        n = .A;
    275299                        rateper = .A;
    276300                        LL = put('**', 8.0);
    277301                        UL = put('**', 8.0);
     302                        *only 1 val attr allowed, over-write redflag if suppressed;
     303                        redflag = put('Suppressed', $12.);
    278304                end;
    279305        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.def
     1#NM_RateAA10K_GE25.def
    22#Calculates directly age-adjusted rates per 10,000 for
    33#  records that have been filtered by IBIS-Q (data=tmp)
    44#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)
    77#NM_ in filename = applies cell suppression rule
    88#Outputs redflag var based on RSE
     
    1515OPTION SPOOL;
    1616
     17        %LET MULTIPLIER=10000;
     18        %LET STDVAR=agegrp18;
     19        %LET NCAT=18;
    1720 ************************** 1. TMP ******************************;
    1821 * The dataset 'tmp' is the numerator dataset that has been read ;
     
    2124 * The variable "x" must be in the dataset, it is set equal to 1.;
    2225 ****************************************************************;
     26 
     27 Data   tmp;
     28        set tmp;
     29                agegrp18=agegrp18_a;
     30         run;
    2331        proc summary data=tmp;
    24                 var x;
    25                 class agegrp18_a %cross1%
     32                var x;
     33                class  &STDVAR. 
     34                %cross1%
    2635                ?cross2? %cross2%
    2736                ;
    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;
    3342        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
    3848 ********************** 2. %data_frame% *************************;
    3949 * %data_frame% is a dataset created by IBIS-Q. It consists of   ;
     
    4656                retain count 0;
    4757                do
    48                         agegrp18_a = 1 to 18 by 1 ;
     58                        &STDVAR. = 1 to &NCAT. by 1 ;
    4959                        output;
    5060                end;
     
    7989        quit;
    8090        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.;
    90104                drop _TYPE_ _FREQ_ ;
    91105        run;
    92         /*
     106
    93107        proc print data=newtmp noobs;
    94108                title2 '2. NEWTMP, after frame merged with tmp';
    95109                run;
    96         */
     110
    97111        data tmp;
    98112                set newtmp;
     
    104118 * cross1 and cross2 totals to -1.                               ;
    105119 ****************************************************************;
    106         data poptmp; format agegrp18 %popcross1% %popcross2% 8.; set poptmp; run; 
     120        data poptmp; format &STDVAR %popcross1% %popcross2% 8.;
     121         set poptmp; run; 
    107122        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;
    111127        run;
    112128        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
    119134 *********************** 4. NUMBERS *****************************;
    120135 * Join tmp, pop.                                                ;
    121136 * -1 values are left of out NUMBERS because stdpop doesn't have ;
    122  * any -1 values.                                                ;
     137 * any -1 values.
    123138 ****************************************************************;
    124139        proc sql;
     
    126141                select tmp.*, pop.*
    127142                from tmp left join pop
    128                 on tmp.agegrp18_a=pop.agegrp18
     143                on tmp.&STDVAR.=pop.&STDVAR.
    129144                ?popcross1? and tmp.%cross1%=pop.%popcross1% 
    130145                ?popcross2? and tmp.%cross2%=pop.%popcross2%
     
    133148        data numbers;
    134149                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;
    136151                if %cross1%=. then %cross1%=-1;
    137                 ?cross2? if %cross2%=. then %cross2%=-1;
    138         /*
     152                ?cross2? if %cross2%=. then %cross2%=-1; 
     153
    139154        proc print data=numbers noobs;
    140155                title2 '4. NUMBERS';
    141156                title3 ' ';
    142         run; 
    143         */
     157        run;
     158
    144159 ************************ 5. STDWGT *****************************;
    145160 * Select the appropriate records from the stdwgts  datafile.    ;
     
    161176                set pop.stdwgts;
    162177                *pop libname is set in .cfg file with the saspop statement;
    163                 if (stdvar='AgeGrp18GE25'); *stdvar name is case-sensitive;
    164                 keep agegrp18 stdwgt;
    165         run;
    166         /*
     178                if (stdvar="AgeGrp18GE25");
     179                keep &STDVAR. stdwgt;
     180        run;
     181 
    167182        proc print data=stdwgt noobs; 
    168183                title2 '5. STDWGT- std. pop. weights for direct age-adjustment';
    169         run; 
    170         */
     184        run;
     185
    171186 ******************** 6. NUMBERS2 *******************************;
    172187 * Adds the standard population weights to the numerator and     ;
     
    178193                select numbers.*, stdwgt.stdwgt
    179194                from numbers left join stdwgt
    180                 on numbers.agegrp18=stdwgt.agegrp18
     195                on numbers.&STDVAR.=stdwgt.&STDVAR.
    181196                ;
    182         quit; 
    183         /*
     197        quit;
     198
    184199        proc print data=numbers2 noobs;
    185200                title2 '6. NUMBERS2- Standard POP wgts merged onto dataset';
    186201        run;
    187         */
     202
    188203 *********************** 7. AGESPECIFIC *************************;
    189204 * Calculate age-specific rates & cross-products                 ;
     
    195210                * Montana method... rate_var=count*(stdwgt/popcount)**2;  * New formula from doh.wa.gov;
    196211                rate_var=(stdwgt**2)*((r*(1-r))/popcount);
    197         /*
     212
    198213        proc print data=agespecific noobs; 
    199214                title2 '7. AGESPECIFIC - combines numer and denom data, includes R (age-specific proportion),';
    200215                title3 'RATEWGT (weighted age-specific rate), and RATE_VAR (rate variance) vars';
    201216        run;
    202         */
     217
    203218 ************************ 8. AARATE ******************************;
    204219 * Sum the age-specific rates into aa rates, and merge wgtmax.    ;   
    205220 *****************************************************************;
    206221        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
    217230        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
    222235 ******************* 9. TMP *************************************;
    223236 * Almost final IBIS output dataset.                             ;
     
    225238 * coded back to '.' after this step.                            ;
    226239 ****************************************************************;
    227         data tmp;
     240        data rate;
    228241                set aarate;
    229242                if %cross1%=-1 then %cross1%=.;         *Recode the statewide totals.;
     
    231244               
    232245                if (count>0) then do;
    233                                 rateper=(aarate*10000);
     246                                rateper=(aarate*&MULTIPLIER.);
    234247                                rate_se=sqrt(aarate_var);
    235                                 stderr=(rate_se*10000);
     248                                stderr=(rate_se*&MULTIPLIER.);
    236249                        end;
    237250                if (count<=0) then do;
     
    239252
    240253                                rateper=0;
    241                                 stderr=sqrt((3/popcount)*(1-(3/popcount))/popcount)*10000;
     254                                stderr=sqrt((3/popcount)*(1-(3/popcount))/popcount)*&MULTIPLIER.;
    242255                        end;
    243256                t1=(rateper-(1.96*stderr));
     
    256269 * (xslt\html\query\module\result\ResultPage.xslt, ...Values.xslt ;
    257270 *****************************************************************;
     271 
    258272                if count>0 then do;
    259273                        rse=(stderr/rateper);
    260                         redflag=put('-', $14.);
    261                         if rse>.3 then redflag=put('Unstable', $14.);
    262                         if rse>.5 then redflag=put('Very Unstable', $14.);
    263                         if stderr=. then redflag=put('Unstable', $14.);
     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.);
    264278                end;
    265                 if count<=0 then redflag=put('Unstable', $14.);  *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;
    266280        run;
    267281
     
    279293 *******************************************************************;
    280294        data tmp;
    281                 set tmp;
     295                set rate;
    282296                if ((0<n<4) and (popcount<5000)) then do;
    283297                        n = .A;
     
    285299                        LL = put('**', 8.0);
    286300                        UL = put('**', 8.0);
     301                        redflag = put('Suppressed', $12.);
    287302                end;
    288        
     303
    289304        proc print data=tmp noobs;  title2 '11. TMP - final dataset to pass to IBIS View app';
    290305        run;
  • adopters/nm/trunk/src/main/backend_qModules/3.0/_EPHT/hidd/NM_RateAA10K_GE35.def

    r23695 r24441  
    1515OPTION SPOOL;
    1616
     17        %LET MULTIPLIER=10000;
     18        %LET STDVAR=agepop;
     19        %LET NCAT=11;
    1720 ************************** 1. TMP ******************************;
    1821 * The dataset 'tmp' is the numerator dataset that has been read ;
     
    2124 * The variable "x" must be in the dataset, it is set equal to 1.;
    2225 ****************************************************************;
     26 
     27 Data   tmp;
     28        set tmp;
     29                agepop=agepop_a;
     30         run;
     31         
    2332        proc summary data=tmp;
    24                 var x; 
    25                 class agepop_a %cross1%
     33                var x;
     34                class &STDVAR. %cross1%
    2635                ?cross2? %cross2%
    2736                ;
    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
    3343        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;
    3848 ********************** 2. %data_frame% *************************;
    3949 * %data_frame% is a dataset created by IBIS-Q. It consists of   ;
     
    4656                retain count 0;
    4757                do
    48                         agepop_a = 1 to 11 by 1 ;
     58                        &STDVAR. = 1 to &NCAT. by 1 ;
    4959                        output;
    5060                end;
     
    8191                by %cross1%
    8292                   ?cross2? %cross2%
    83                    agepop_a;
     93                   &STDVAR. ;
    8494                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.;
    95104                drop _TYPE_ _FREQ_ ;
    96105        run;
     106
    97107        /*
    98108        proc print data=newtmp noobs;
     
    109119 * cross1 and cross2 totals to -1.                               ;
    110120 ****************************************************************;
    111         data poptmp; format agepop %popcross1% %popcross2% 8.; set poptmp; run; 
     121        data poptmp; format  &STDVAR %popcross1% %popcross2% 8.;
     122         set poptmp; run; 
    112123        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;
    116128        run;
    117129        data pop;
    118                 set pop;
    119                 drop _TYPE_ _FREQ_;
    120                 proc print data=pop noobs; 
    121                    title2 '3. POP - denominator dataset';
     130                 set pop;
     131
     132        proc print data=pop noobs; 
     133                 title2 '3. POP - denominator dataset';
    122134        run;
    123135 
     
    131143                select tmp.*, pop.*
    132144                from tmp left join pop
    133                 on tmp.agepop_a=pop.agepop
     145                on tmp.&STDVAR.=pop.&STDVAR.
    134146                ?popcross1? and tmp.%cross1%=pop.%popcross1% 
    135147                ?popcross2? and tmp.%cross2%=pop.%popcross2%
     
    138150        data numbers;
    139151                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;
    141153                if %cross1%=. then %cross1%=-1;
    142                 ?cross2? if %cross2%=. then %cross2%=-1;
    143         /*
     154                ?cross2? if %cross2%=. then %cross2%=-1; 
     155
    144156        proc print data=numbers noobs;
    145157                title2 '4. NUMBERS';
    146158                title3 ' ';
    147159        run;
    148         */
     160
    149161 ************************ 5. STDWGT *****************************;
    150162 * Select the appropriate records from the stdwgts  datafile.    ;
     
    167179                *pop libname is set in .cfg file with the saspop statement;
    168180                if (stdvar='agepopGE35'); *stdvar name is case-sensitive;
    169                 keep agepop stdwgt;
    170         run;
     181                keep &STDVAR. stdwgt;
     182        run;
     183        /*
    171184        proc print data=stdwgt noobs; 
    172185                title2 '5. STDWGT- std. pop. weights for direct age-adjustment';
    173         run;
     186        run;
     187        */
    174188 ******************** 6. NUMBERS2 *******************************;
    175189 * Adds the standard population weights to the numerator and     ;
     
    181195                select numbers.*, stdwgt.stdwgt
    182196                from numbers left join stdwgt
    183                 on numbers.agepop_a=stdwgt.agepop
     197                on numbers.&STDVAR.=stdwgt.&STDVAR.
    184198                ;
    185199        quit;
    186         /*
     200
    187201        proc print data=numbers2 noobs;
    188202                title2 '6. NUMBERS2- Standard POP wgts merged onto dataset';
    189203        run;
    190         */
     204
    191205 *********************** 7. AGESPECIFIC *************************;
    192206 * Calculate age-specific rates & cross-products                 ;
     
    208222 *****************************************************************;
    209223        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       
    220231        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";
    222233                title3 'rate variance within each cross-by var';
    223      run; 
    224         */
     234     run;
     235
    225236 ******************* 9. TMP *************************************;
    226237 * Almost final IBIS output dataset.                             ;
     
    228239 * coded back to '.' after this step.                            ;
    229240 ****************************************************************;
    230         data tmp;
     241        data rate;
    231242                set aarate;
    232243                if %cross1%=-1 then %cross1%=.;         *Recode the statewide totals.;
     
    234245               
    235246                if (count>0) then do;
    236                                 rateper=(aarate*10000);
     247                                rateper=(aarate*&MULTIPLIER.);
    237248                                rate_se=sqrt(aarate_var);
    238                                 stderr=(rate_se*10000);
     249                                stderr=(rate_se*&MULTIPLIER.);
    239250                        end;
    240251                if (count<=0) then do;
     
    242253
    243254                                rateper=0;
    244                                 stderr=sqrt((3/popcount)*(1-(3/popcount))/popcount)*10000;
     255                                stderr=sqrt((3/popcount)*(1-(3/popcount))/popcount)*&MULTIPLIER.;
    245256                        end;
    246257                t1=(rateper-(1.96*stderr));
     
    259270 * (xslt\html\query\module\result\ResultPage.xslt, ...Values.xslt ;
    260271 *****************************************************************;
     272 
    261273                if count>0 then do;
    262274                        rse=(stderr/rateper);
    263                         redflag=put('-', $14.);
    264                         if rse>.3 then redflag=put('Unstable', $14.);
    265                         if rse>.5 then redflag=put('Very Unstable', $14.);
    266                         if stderr=. then redflag=put('Unstable', $14.);
     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.);
    267279                end;
    268                 if count<=0 then redflag=put('Unstable', $14.);  *no variance, n=0, rse=div by zero;
     280                if count<=0 then redflag=put('Unstable', $12.);
    269281        run;
    270282
     
    282294 *******************************************************************;
    283295        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;
    286298                        n = .A;
    287299                        rateper = .A;
    288300                        LL = put('**', 8.0);
    289301                        UL = put('**', 8.0);
    290                 end;
    291                
     302                        redflag = put('Suppressed', $12.);
     303                 end;
     304
    292305        proc print data=tmp noobs;  title2 '11. TMP - final dataset to pass to IBIS View app';
    293306        run;
  • adopters/nm/trunk/src/main/backend_qModules/3.0/_EPHT/hidd/_HIDD.cfg

    r24328 r24441  
    1919# 1/24/2017   Brian(brd)Current data through 2015
    2020# 8/13/2021   Brian     add 2020 data
     21# 1/3/2022    BW, modernize with V3 Stability constructs
    2122#
    2223#==============================================================================
     
    1051064 hispeth HispEth hisp Ethnicity num 0 8
    1061074 biology EthHerit dohraceth Decendancy num 0 8
    107 4 NMDOHRaceEth NMDOHEthHerit null NMRace&Eth num 0 8
     108#4 NMDOHRaceEth NMDOHEthHerit null NMRace&Eth num 0 8
    108109
    1091105 null EPHTIndicatorProxy null EPHT&Indicator&Proxy num 10 3
Note: See TracChangeset for help on using the changeset viewer.