Changeset 24445 in main


Ignore:
Timestamp:
01/10/22 16:25:25 (11 months ago)
Author:
LoisHaggard_STG
Message:

NM EPHT Backend qModules30 - update to mortmc folder

Location:
adopters/nm/trunk/src/main/backend_qModules/3.0/_EPHT/mortmc
Files:
33 added
12 deleted
6 edited

Legend:

Unmodified
Added
Removed
  • adopters/nm/trunk/src/main/backend_qModules/3.0/_EPHT/mortmc/NM_Count.def

    r22345 r24445  
    2222                ?cross2? %cross2%
    2323                ;
    24                 output out=tmp (drop=_TYPE_ _FREQ_) sum=count;
    25         proc sort data=tmp out=sorted; by %cross1%
    26                 ?cross2? %cross2%
     24                output out=tmp (drop=_TYPE_ _FREQ_) sum=number;
     25        proc sort data=tmp out=sorted;
     26          by %cross1%
     27                 ?cross2? %cross2%
    2728                ; run;
    28         proc print data=tmp noobs;
    29                 title1 '---------------------------------';
    30                 title2 '1. TMP - numerator dataset';
     29        proc print data=tmp noobs;
     30         title1 '---------------------------------';
     31         title2 '    tmp -- Numerator Dataset     ';
     32         title3 '---------------------------------';
    3133                run;
    3234       
     
    3436 * df_%cross1%%cross2% is a dataset created by IBIS-Q.           ;
    3537 * It consists of %cross1% and %cross2% (if the user specified   ;
    36  * %cross2%) and a variable named "count" that is set to "0".    ;
     38 * %cross2%) and a variable named "number" that is set to "0".    ;
    3739 * The results of the proc summary must be merged with the       ;
    3840 * df_%cross1%%cross2% dataset.                                  ;
    3941 ****************************************************************;
    40 
    4142        data frame;
    4243                set df_%cross1%%cross2%;
     
    4546                ?cross2? %cross2%
    4647                ; run;
    47         proc print data=frame noobs;
    48                 title2 '2. Data Frame';
    49                 run;
    50 
    51         data tmp;
    52                 *length count 8; *ZW put this in his ibisq code, so we don't need it here anymore.;
    53                 merge frame sorted;
    54                 by %cross1%
    55                    ?cross2? %cross2%
    56                 ;
    57                 run;
     48        proc print data=frame noobs;
     49         title1 '---------------------------------';
     50         title2 '           Data Frame            ';
     51         title3 '---------------------------------';
     52                run;
     53
     54        data  tmp;
     55        merge frame sorted;
     56           by %cross1%
     57                  ?cross2? %cross2%
     58                  ;
     59           run;
     60           
    5861        proc print data=tmp noobs;
     62         title1 '----------------------------------';
     63         title2 ' Merged Frame & Numerator Dataset ';
     64         title3 '----------------------------------';
    5965                title2 '2. TMP';
    6066                run;
     
    8288                proc summary data=poptmp;
    8389                        var popcount;
    84                         output out=pop (drop=_TYPE_ _FREQ_) sum=popcount;
     90                        output out=pop (drop=_TYPE_ _FREQ_) sum=popnum;
    8591                run;
    8692                proc sql;
     
    95101                        var popcount;
    96102                        class %popcross1% %popcross2%;
    97                         output out=pop (drop=_TYPE_ _FREQ_) sum=popcount;
     103                        output out=pop (drop=_TYPE_ _FREQ_) sum=popnum;
    98104                run;
    99105                proc sql;
     
    111117                        var popcount;
    112118                        class %popcross1% %popcross2%  ;
    113                         output out=pop (drop=_TYPE_ _FREQ_) sum=popcount;
     119                        output out=pop (drop=_TYPE_ _FREQ_) sum=popnum;
    114120                run;
    115121                proc sql;
     
    128134 * Create the output variables for the IBIS xml/map file.         ;
    129135 *****************************************************************;
     136 
     137proc print data=rate; title2 'RATE DATA for STABILITY';
     138
    130139        data tmp;
    131                 set rate;
    132                 rate=count/popcount;
    133                 rateper=(rate*100000);
    134                 if count>0 then do;
    135                                 stderr=sqrt(rate*(1-rate)/popcount)*100000;
    136                         end;
    137                 if count=0 then do;
    138                                 stderr=sqrt((3/popcount)*(1-(3/popcount))/popcount)*100000;
    139                         end;
     140         set rate;
     141         
     142                 if number=. then n=0; else n=number;
     143                 rate=n/popnum;
     144                 rateper=(rate*100000);
     145                 
     146                 if n > 0 then do;
     147                        stderr=sqrt(rate*(1-rate)/popnum)*100000;
     148                 end;
     149                 if n = 0 then do;
     150                        stderr=sqrt((3/popnum)*(1-(3/popnum))/popnum)*100000;
     151                 end;
    140152                t1=(rateper-(1.96*stderr));
    141153                if (t1<0) then t1=0;
     
    144156                LL=compress(LL);
    145157                UL=compress(UL);
    146                 n=count;        *ibis-q needs a count variable named 'n';
    147 
    148  *********************** 5. Red Flag *****************************;
    149  * redflag is the statistical stability indicator based on the    ;
    150  * relative standard error (RSE, or coefficient of variation).    ;
    151  * Redflag values created here are converted to images or special ;
    152  * characters in IBIS-View application XSLTfiles, for instance:   ;
    153  * (xslt\html\query\module\result\ResultPage.xslt, ...Values.xslt ;
    154  *****************************************************************;
    155                 if count>0 then do;
     158
     159
     160/*******************************************************/
     161/*       Statictical Stability Indicator Redflag       */
     162/* Based on the relative standard error (RSE), redflag */
     163/* values are converted to special characters in       */
     164/* IBIS-View application XSLT files                    */
     165/* xslt\html\query\module\result\ ResultPage.xslt and  */
     166/* Values.xslt                                         */
     167/*******************************************************/
     168
     169                 if n > 0 then do;
    156170                        rse=(stderr/rateper);
    157171                        redflag=put('', $12.);
    158172                        if rse>.3 then redflag=put('Unstable', $12.);
    159173                        if rse>.5 then redflag=put('VeryUnstable', $12.);
    160                         if stderr=. then redflag=put('Unstable', $12.); 
    161                 end;
     174                        if stderr=. then redflag=put('Unstable', $12.);
     175                 end;
    162176                *no variance, n=0, rse=div by zero;
    163                 if count<=0 then redflag=put('Unstable', $12.);
     177                 if n <= 0 then redflag=put('Unstable', $12.);
    164178        run;
    165179
    166   **************** New Mexico Small Numbers Rule *********************;
    167   * Suppress cells if the numerator in (1 2 3) AND the denominator    ;
    168   * is less than 20. For Counts, must run the crude rate code to      ;
    169   * capture the denominator, but only output the N. ZW’s program      ;
    170   * uses ".A" to identify cells for suppression. I have co-opted      ;
    171   * his method so I can use the NM logic for cell suppression instead ;
    172   * of the standard IBIS logic. And I need to use ZWs program         ;
    173   * because it will suppress the table marginals that can be used to  ;
    174   * calculate the suppressed cells. If this code is used, the .def    ;
    175   * file should have the NM_ prefix. Needs suppressed_variabes        ;
    176   * code at the end of this file to work.                             ;
    177   ********************************************************************;
     180/*******************************************************/
     181/*       New Mexico Small Numbers Rule                 */
     182/*******************************************************/
     183                 
    178184        data tmp;
    179185                set tmp;
    180                 if ((0<n<4) and (.<popcount<5000)) then do;
     186                if ((0<n<4) and (.<popnum<5000)) then do;
    181187                        n = .A;
    182188                        rateper = .A;
     
    184190                        UL = put('**', 8.0);
    185191
    186                 *Only one value attribute is allowed - so if suppressed, overwrite unstable;
    187                 *This also puts ** in record code column for suppressed rows, and adds footnote;
    188192                        redflag = put('Suppressed', $12.);
    189193                end;
    190                 if popcount=. then redflag=put('', $12.); *no value attribute for missing crossby values;
     194                if popnum=. then redflag=put('', $12.); *no value attribute for missing crossby values;
    191195        proc print data=tmp noobs;  title2 '6. TMP - final dataset to pass to IBIS View app';
    192196        run;
     
    195199# definition for output file
    196200f out_variable count
    197 f xml_out_map_file XMLNumDeaths.map
     201f xml_out_map_file XMLNum.map
    198202--------BoNdArY--------
    199203f out_detail lbl_not_used__see_xml_out_map_file
    200   n 15.0
    201   redflag 15.0
     204  n 12.0
     205  redflag 12.0
    202206--------BoNdArY--------
    203207 
  • adopters/nm/trunk/src/main/backend_qModules/3.0/_EPHT/mortmc/NM_CrudeRate100K.def

    r21905 r24445  
    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  run;
     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. ******;
    1657
    1758%let flag=0;
     
    2364
    2465%if &flag=0 %then %do;
    25   proc summary data=poptmp;
    26     var popcount;
    27     output out=pop sum=popnum;
    28   run;
    29   proc sql;
    30     create table rate as
    31     select tmp.*, pop.*
    32     from tmp, pop
    33   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;
    3481%end;
    3582
    3683%if &flag=1 %then %do;
    37   proc summary data=poptmp;
    38     var popcount;
    39     class %popcross1% %popcross2%;
    40     output out=pop sum=popnum;
    41   run;
    42   proc sql;
    43     create table rate as
    44     select tmp.*, pop.*
    45     from tmp, pop
    46     where
    47     ?popcross1? tmp.%cross1%=pop.%popcross1%;
    48     ?popcross2? tmp.%cross2%=pop.%popcross2%; 
    49   quit;
     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;
    50101%end;
    51102
    52103%if &flag=2 %then %do;
    53   proc summary data=poptmp;
    54     var popcount;
    55     class %popcross1% %popcross2%  ;
    56     output out=pop sum=popnum;
    57   run;
    58   proc sql;
    59     create table rate as
    60     select tmp.*, pop.*
    61     from tmp, pop
    62     where tmp.%cross1%=pop.%popcross1% and
    63     tmp.%cross2%=pop.%popcross2%;
    64   quit;
    65 %end;
     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  ';
     111  run;
     112        proc sql;
     113            create table rate as
     114            select tmp.*, pop.*
     115            from tmp full join pop
     116            on
     117            tmp.%cross1%=pop.%popcross1% and
     118            tmp.%cross2%=pop.%popcross2%; 
     119        quit;
     120%end;
    66121%mend;
    67122%popcross;
    68123
    69 data tmp;
    70   set rate;
    71   rate=number/popnum;
    72   rateper=(rate*100000);
    73   stderr=sqrt(rate*(1-rate)/popnum)*100000;
    74   t1=(rateper-(1.96*stderr));
    75   if (t1<0) then t1=0;
    76   LCL=put(t1, 8.2);
    77   UCL=put((rateper+(1.96*stderr)), 8.2);
    78   LCL=compress(LCL);
    79   UCL=compress(UCL);
    80   CI=LCL || ' - ' || UCL;
    81   n=number;
    82 
    83   *redflag;
    84   /*redflag is the statistical stability indicator,
    85   based on the relative standard error (RSE, or
    86   coefficient of variance). Redflag values are
    87   converted to images or special characters in XSLT
    88   files (xslt\html\query\module\result\ResultPage.xslt
    89   and ...Values.xslt*/
    90 
    91   rse=(stderr/rateper);
    92   if rse>.3 then redflag=1; *statistical stability – 1 red flag;
    93   if rse>.5 then redflag=2; *statistical stability - 2 red flags;
    94   if stderr=. then redflag=2; *no variance, n=1;
     124proc print data=rate;
     125         title2 '3.       Rate Ready Data          ';
     126  run;
     127
     128
     129******************  Rates data.  ***************;
     130
     131data  rates;
     132  set rate;
     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;
    95166run;
    96 proc print data=tmp; title 'almost final tmp'; run;
    97 
    98 data tmp;
    99   set tmp;
    100   /* New Mexico Small Numbers Rule */
    101   if ((0<n<4) and (popnum<5000)) then do;
    102     n = .A;
    103     rateper = .A;
    104 end;
    105 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;
    106188
    107189--------BoNdArY--------
     
    114196  n 15.0
    115197  popnum 15.0
    116   LCL 15.1
    117   UCL 15.1
    118   redflag 15.0
    119 --------BoNdArY--------
    120 --------BoNdArY--------
    121 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
    122205  n
    123   rateper
    124   LCL
    125   UCL
    126 --------BoNdArY--------
     206  popcount
     207  LL
     208  UL
     209--------BoNdArY--------
  • adopters/nm/trunk/src/main/backend_qModules/3.0/_EPHT/mortmc/NM_RateAA100K.def

    r21905 r24445  
    1 #NM_RateAA10K_data_frame.def
     1#NM_RateAA10K.def
    22#Calculates directly age-adjusted rates per 10,000 for
    33#  records that have been filtered by IBIS-Q (data=tmp)
     
    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 ;
    1922 * in already by ibis-q. Any filters have already been applied.  ;
    20  * The proc summary counts deaths by agepop, cross1, and cross2. ;
     23 * The proc summary counts deaths by agepop_a, cross1, and cross2. ;
    2124 * The variable "x" must be in the dataset, it is set equal to 1.;
    2225 ****************************************************************;
     26
    2327        proc summary data=tmp;
    2428                var x;
    25                 class agepop %cross1%
     29                class  &STDVAR. %cross1%
    2630                ?cross2? %cross2%
    2731                ;
    28                 output out=tmp sum=count;
    29         proc sort data=tmp; by agepop %cross1%
    30                 ?cross2? %cross2%
     32                output out=tmp (drop=_TYPE_ _FREQ_) sum=count;
     33
     34        proc sort data=tmp; 
     35                by %cross1% %cross2% &STDVAR.;
    3136                ; run;
    3237        proc print data=tmp noobs;
    33                 title1 '---------------------------------';
    34                 title2 '1. TMP - numerator dataset';
    35                 run;
     38                 title1 '---------------------------------';
     39                 title2 '1.   TMP - numerator dataset     ';
     40                 title3 '---------------------------------';
     41          run;
    3642
    3743 ********************** 2. %data_frame% *************************;
     
    4349 ****************************************************************;
    4450        data agepop_frame;
    45                 retain count 0;
    46                 do
    47                         agepop= 1 to 11 by 1 ;
     51                 retain count 0;
     52                 do
     53                        &STDVAR. = 1 to &NCAT. by 1 ;
    4854                        output;
    49                 end;
     55                 end;
    5056        run;
    5157        *************************************************************************************;
     
    5561        * then crosses by sex), there will be a total row for the cross1 and cross2 values.  ;
    5662        * So in a later step, the new_frame dataset is sorted with a "nodupkey" option to    ;
    57         * remove the additional dimension total values.                                      ;
     63        * remove the additional dimension total values.;
    5864        *************************************************************************************;
     65
    5966        data crosstotalframe;
    60                 retain count 0;
    61                 do
     67                 retain count 0;
     68                 do
    6269                        %cross1%=.;
    6370                        ?cross2? %cross2%=.;
    6471                        output;
    65                 end;
    66         run;
     72                 end;
     73        run;
     74
    6775        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;
     76         set df_%cross1%%cross2% crosstotalframe;
     77        run;
     78
     79        proc print data=df_%cross1%%cross2% noobs;
     80                 title2 'cross1cross2 frame with total row'; run;
     81        proc print data=agepop_frame noobs;
     82                 title2 'agepop frame'; run;
    7283        proc sql;
    7384                create table new_frame as
     
    7687        quit;
    7788        proc sort data=new_frame nodupkey;
    78                 by %cross1%
    79                    ?cross2? %cross2%
    80                    agepop;
    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; run;
    84         data newtmp;
    85                 merge new_frame tmp;  *must list frame dataset first, then tmp;
    86                 by %cross1% %cross2% agepop;
    87                 drop _TYPE_ _FREQ_ ;
     89          by %cross1%
     90                 ?cross2? %cross2%
     91                 &STDVAR.;
     92          run;
     93
     94        proc print data=new_frame noobs;
     95                 title2 'new_frame, sorted with nodupkey'; run;
     96
     97        proc sort data=tmp out=sorted;
     98          by %cross1% %cross2% &STDVAR; run;
     99        data  newtmp;
     100        merge new_frame sorted;  * tmp, must list frame dataset first, then sorted tmp;
     101          by  %cross1% %cross2% &STDVAR.;
     102                  drop _TYPE_ _FREQ_ ;
    88103        run;
    89104
    90105        proc print data=newtmp noobs;
    91                 title2 '2. NEWTMP, after frame merged with tmp';
     106                 title2 '2. NEWTMP, after frame merged with tmp';
    92107                run;
    93108        data tmp;
    94                 set newtmp;
     109         set newtmp;
    95110        run;
    96111
     
    100115 * cross1 and cross2 totals to -1.                               ;
    101116 ****************************************************************;
    102         data poptmp; format agepop %popcross1% %popcross2% 8.; set poptmp; run; 
     117        data poptmp;
     118             format &STDVAR. %popcross1% %popcross2% 8.;
     119         set poptmp;
     120          run; 
    103121        proc summary data=poptmp;
    104122                var popcount;
    105                 class agepop  %popcross1% %popcross2%;
    106                 output out=pop sum=popcount;
     123                class &STDVAR.  %popcross1% %popcross2%;
     124                output out=pop (drop=_TYPE_ _FREQ_) sum=popcount;
    107125        run;
    108126        data pop;
    109                 set pop;
    110                 drop _TYPE_ _FREQ_;
    111                 proc print data=pop noobs; 
    112                    title2 '3. POP - denominator dataset';
    113         run;
    114  
     127         set pop;
     128               
     129        proc print data=pop noobs;
     130                 title1 '---------------------------------';
     131                 title2 '3.  POP - denominator dataset    ';
     132                 title3 '---------------------------------';
     133        run;
     134
    115135 *********************** 4. NUMBERS *****************************;
    116136 * Join tmp, pop.                                                ;
    117137 * -1 values are left of out NUMBERS because stdpop doesn't have ;
    118  * any -1 values.                                                ;
     138 * any -1 values.     ;
     139 * The popcross flag is not used here because the use of the age grouping variable   ;
     140 * allows for each of the following rows of the join statement to begin with "and".  ;
    119141 ****************************************************************;
    120142        proc sql;
     
    122144                select tmp.*, pop.*
    123145                from tmp left join pop
    124                 on tmp.agepop=pop.agepop
     146                on tmp.&STDVAR. = pop.&STDVAR.
    125147                ?popcross1? and tmp.%cross1%=pop.%popcross1% 
    126148                ?popcross2? and tmp.%cross2%=pop.%popcross2%
     
    129151        data numbers;
    130152                set numbers;
    131                 if agepop^=.; *get rid of total rows to stop doubling from pop proc summary;
     153                if &STDVAR.^=.; *get rid of total rows to stop doubling from pop proc summary;
    132154                if %cross1%=. then %cross1%=-1;
    133155                ?cross2? if %cross2%=. then %cross2%=-1;
    134156        proc print data=numbers noobs;
    135                 title2 '4. NUMBERS';
    136                 title3 ' ';
     157                 title2 '4.           NUMBERS             ';
     158                 title3 '---------------------------------';
    137159        run;
    138160
    139161 ************************ 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                        ;
     162 * Select the appropriate records from the stdwgts datafile.     ;
     163                                                                                                                                 
     164 *'stdvar' variable names are as follows:          ;
     165 *   agepop - the standard 11 age group weights                  ;
     166 *   agepopGE25 - agepop wgts for age>=35                        ;
     167 *   agepopGE35 - agepop wgts for age>=35                        ;
     168 * Using this version of the age-adjustment .DEF file requires   ;
     169 * that you have variables in both your numerator and denominator;
     170 * datasets with this variable name.                             ;
     171                                                                                                                           
     172                                                                                                                           
     173                                                                                                                           
     174                                                                                                                           
    153175 ****************************************************************;
    154176        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;
     177                 *format agevar $12.;
     178                 informat stdwgt 7.6;
     179                 set pop.stdwgts;
     180                 *pop libname is set in .cfg file with the saspop statement;
     181                 if (stdvar="&STDVAR.");
     182                 keep &STDVAR. stdwgt;
     183          run;
    161184        proc print data=stdwgt noobs; 
    162185                title2 '5. STDWGT- std. pop. weights for direct age-adjustment';
     
    171194                select numbers.*, stdwgt.stdwgt
    172195                from numbers left join stdwgt
    173                 on numbers.agepop=stdwgt.agepop
     196                on numbers.&STDVAR.=stdwgt.&STDVAR.
    174197                ;
    175198        quit;
     
    197220 *****************************************************************;
    198221        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;
     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         run;
     227                         
     228                         
     229                                         
     230         
     231        proc sort data=aarate; by %cross1% %cross2%; run;
    208232        proc print data=aarate noobs;
    209                 title2 '8. AARATE - summed across weighted agepop cross-products to get AA rate and';
     233                title2 "8. AARATE - summed across weighted &STDVAR. cross-products to get AA rate and";
    210234                title3 'rate variance within each cross-by var';
    211235      run;
     
    216240 * coded back to '.' after this step.                            ;
    217241 ****************************************************************;
    218         data tmp;
     242
     243        data rate;
    219244                set aarate;
    220245                if %cross1%=-1 then %cross1%=.;         *Recode the statewide totals.;
     
    222247               
    223248                if (count>0) then do;
    224                                 rateper=(aarate*100000);
     249                                rateper=(aarate*&MULTIPLIER.);
    225250                                rate_se=sqrt(aarate_var);
    226                                 stderr=(rate_se*100000);
     251                                stderr=(rate_se*&MULTIPLIER.);
    227252                        end;
    228253                if (count<=0) then do;
     
    230255
    231256                                rateper=0;
    232                                 stderr=sqrt((3/popcount)*(1-(3/popcount))/popcount)*100000;
     257                                stderr=sqrt((3/popcount)*(1-(3/popcount))/popcount)*&MULTIPLIER.;
    233258                        end;
    234259                t1=(rateper-(1.96*stderr));
     
    247272 * (xslt\html\query\module\result\ResultPage.xslt, ...Values.xslt ;
    248273 *****************************************************************;
     274
    249275                if count>0 then do;
    250276                        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.);
     277                        redflag=put(' ', $12.);
     278                        if rse>.3 then redflag=put('Unstable', $12.);
     279                        if rse>.5 then redflag=put('Very Unstable', $12.);
     280                        if stderr=. then redflag=put('Unstable', $12.);
    255281                end;
    256                 if count<=0 then redflag=put('Unstable', $14.);  *no variance, n=0, rse=div by zero;
     282                if count<=0 then redflag=put('Unstable', $12.);  *no variance, n=0, rse=div by zero;
    257283        run;
    258284
     
    269295 * code at the end of this file to work.                            ;
    270296 *******************************************************************;
     297
    271298        data tmp;
    272                 set tmp;
    273                 if ((0<n<4) and (popcount<5000)) then do;
     299                set rate;
     300                if ((0<n<4) and (.<popcount<5000)) then do;
    274301                        n = .A;
    275302                        rateper = .A;
    276303                        LL = put('**', 8.0);
    277304                        UL = put('**', 8.0);
     305                        *only 1 val attr allowed, over-write redflag if suppressed;
     306                        redflag = put('Suppressed', $12.);
    278307                end;
    279308        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/mortmc/XMLRate100KNDLCLUCL.map

    r20956 r24445  
    1 1 MEASURE RateAAED100K
     11 MEASURE Rate100K
    222 ANCILLARY_VALUE Numerator
    333 ANCILLARY_VALUE Denominator
    444 ANCILLARY_VALUE LowerConfidenceLimit
    555 ANCILLARY_VALUE UpperConfidenceLimit
    6 6 VALUE_ATTRIBUTE #
     66 VALUE_ATTRIBUTE_NAME
  • adopters/nm/trunk/src/main/backend_qModules/3.0/_EPHT/mortmc/XMLRate10KNDLCLUCL.map

    r20956 r24445  
    1 1 MEASURE RateED10K
     11 MEASURE Rate10K
    222 ANCILLARY_VALUE Numerator
    333 ANCILLARY_VALUE Denominator
    444 ANCILLARY_VALUE LowerConfidenceLimit
    555 ANCILLARY_VALUE UpperConfidenceLimit
    6 6 VALUE_ATTRIBUTE #
     66 VALUE_ATTRIBUTE_NAME
  • adopters/nm/trunk/src/main/backend_qModules/3.0/_EPHT/mortmc/_MortMC.cfg

    r24328 r24445  
    1313# 1/7/2021    bw                  2019 data
    1414# 10/29/2021  bw                  2020 data
     15# 01/6/2022   bw                  V3 adaptations
    1516#==============================================================================
    1617#value name_path value_path   
     
    2122d saspop E:\ibisq\sasData\final\
    2223r sasdata mc_deaths0120
    23 d saspopdata popibiscnty90_20_02aug2021
     24d saspopdata popibiscnty90_20_04nov2021
    2425d sas_bin "C:\Program&Files\SASHome\SASFoundation\9.4\sas.exe" -MEMMAXSZ 128G -MEMCACHE 4 -MEMLIB
    2526r pop_where 2001<=year<=2020
     
    104105
    1051065 null EthProxy null Ethnicity&Proxy num 10 8
    106 5 raceth RacEth DOHraceth Race num 0 8
    107 5 hispeth HispEth null Ethnicity num 0 8
    108 5 biology EthHerit null Decendancy num 0 8
    109 5 NMDOHRaceEth NMDOHEthHerit null NMRace&Eth num 0 8
     1075 raceth RacEth null DOHethheritage num 0 8
     108#5 hispflag HispEth null Hispanic&Ethnicity num 0 8
    110109
    1111106 null GeoProxy null Geographic&Area&Specified num 10 8
Note: See TracChangeset for help on using the changeset viewer.