**************************************************************************************************** * PROGRAM OVERVIEW **************************************************************************************************** * * PROGRAM: ms_cidatablest3.sas * * Created (mm/dd/yyyy): 12/19/2014 * Last modified: 03/14/2018 * Version: 2.2 * *-------------------------------------------------------------------------------------------------- * PURPOSE: * This macro will create the output tables for type 3 cohort. * * Program inputs: * -infolder.&TYPE3FILE. * -infolder.&T3METADATA. * -DPLocal.&RUNID._mstr * * Program outputs: * -DPLOCAL.&RUNID._NumCounts * -MSOC.&RUNID._t3_CIDA * -MSOC.&RUNID._Metadata_for_time_period_&PERIODIDSTART. * * PARAMETERS: * * Programming Notes: * * *-------------------------------------------------------------------------------------------------- * CONTACT INFO: * Mini-Sentinel Coordinating Center * info@mini-sentinel.org * *-------------------------------------------------------------------------------------------------- * CHANGE LOG: * * Version Date Initials Comment (reference external documentation when available) * ------- -------- -------- --------------------------------------------------------------- * 1.1 02/23/14 DM Changed the way EPISODES_ANALYSIS and EPISODES_EXPOSURE are * calculated * * 1.2 03/18/15 DM Changed the way ExpPeriodEndDt is calculated * * 1.3 06/30/16 DM Added tables with Time to censor data * * 1.4 07/13/16 DM Fix for JIRA #QCI-178 * * 1.5 11/07/16 DM Fix for JIRA #QRP-279 * * 1.6 11/30/16 AP Fix for JIRA #QRP-282 * * 1.7 05/05/17 AP 1. Added race and hispanic stratifications * 2. Moved macro call to group loop * * 1.8 10/06/17 AP -Added geographic stratifications * -Recoded sex A/U value (QRP-453) * * 2.0 12/20/17 AP 1. Combined _t3_ and _t3_censor table (QRP-293) * 2. Removed comorbidity enrollment requirement (QRP-435) * * 2.1 02/01/18 AP Removed post-index enrollment requirements (QRP-496) * * 2.2 03/14/18 RR Changed Group length to $40 (QRP-495) ***************************************************************************************************; %macro ms_cidatablest3(); %put =====> MACRO CALLED: ms_cidatablest3 v2.1; *creating age group dataset; data _age; numgrp = countw("&AGESTRAT."," ") ; do i=1 to numgrp; AgeGroup=scan("&AGESTRAT",i," "); AgeGroupSort=i; output; end; keep AgeGroup AgeGroupSort; run; *Get parameters necessary to compute ExpPeriodEndDt; data _CohortInfo; set infolder.&COHORTFILE.(where=(strip(group)="&itgroup.")); keep group EnrDaysAft; run; data _Type3Info; merge infolder.&TYPE3FILE(where=(strip(group)="&itgroup.")) _CohortInfo; by group; run; data _metadata; set _Type3Info; format T3SURVSTARTDATE T3ENDOFUPDATE ExpPeriodStartDt ExpPeriodEndDt date9.; TimePeriod=&PERIODIDSTART.; RequiredFUPPer=max(0,T3RiskTo,T3CtrlTo,EnrDaysAft,&enrdaysaft.); ExpPeriodStartDt=T3SURVSTARTDATE; ExpPeriodEndDt=INTNX('Month', T3ENDOFUPDATE-RequiredFUPPer,0, 'begin')-1; MSReqID="&MSREQID."; RunID="&RUNID."; keep group TimePeriod ExpPeriodStartDt ExpPeriodEndDt T3SURVSTARTDATE T3ENDOFUPDATE MSReqID RunID; run; %if &PERIODIDSTART. > 1 %then %do; data _IncrDates(drop=ExpPeriodEndDt T3ENDOFUPDATE); format ExpPeriodStartDt date9.; set infolder.&T3METADATA.(where=(strip(group)="&itgroup.")); ExpPeriodStartDt=INTNX('Month', ExpPeriodEndDt+1, 0, 'begin'); run; data _metadata; merge _metadata(drop=ExpPeriodStartDt) _IncrDates; by group; TimePeriod=&PERIODIDSTART.; *ExpPeriodStartDt=&ExpPeriodStartDt.; keep group TimePeriod ExpPeriodStartDt ExpPeriodEndDt T3SURVSTARTDATE T3ENDOFUPDATE MSReqID RunID; run; %end; %if %eval(&group. = 1) %then %do; data msoc.&runid._Metadata_for_time_period_&PERIODIDSTART.; retain MSReqID RunID GROUP TimePeriod T3SURVSTARTDATE ExpPeriodStartDt ExpPeriodEndDt T3ENDOFUPDATE; set _metadata; run; %end; %else %do; proc append base=msoc.&runid._Metadata_for_time_period_&PERIODIDSTART. data=_metadata force; run; %end; data _null_; format startfollowup enddate date9.; startfollowup=&MinExpPeriodStartDt.; enddate=&MaxExpPeriodEndDt.; call symputx("startfollowup",startfollowup); call symputx("enddate",enddate); nummonths=intck('month',startfollowup,enddate)+1; call symputx("nummonths",nummonths); run; %put &startfollowup. &enddate. &nummonths.; %if "&race_out" = "Y" %then %do; data _race; format race $1.; do i=0 to 5; race=i; output; end; run; %end; %if "&hispanic_out" = "Y" %then %do; data _hispanic; format hispanic $1.; hispanic="N"; output; hispanic="Y"; output; hispanic="U"; output; run;; %end; /*Merge _mstr with squared tables*/ %macro createdata(table=, censor=); proc sql noprint; create table _mstr&censor.&table. as select mstr.*, age.AgeGroupSort from _PtsMasterList&censor. as mstr left join _age as age on age.AgeGroup=mstr.AgeGroup; quit; data _mstr&censor.&table.; set _mstr&censor.&table.(in=a) AgeYearMonthSex&table.(in=b); if a then do; month=month(indexdt); NPTS_EXPOSURE=1; NPTS_CENSOR_ELIG=CensorEnrol; NPTS_CENSOR_DTH=CensorDeath; NPTS_ANALYSIS=AnalysisCohort; EPISODES_CENSOR_ELIG=CensorEnrol; EPISODES_CENSOR_DTH=CensorDeath; EPISODES_EXPOSURE=Pt_Exposure_Episode_Num>0; EPISODES_ANALYSIS=(Pt_Analysis_Episode_Num>0 and WinOfevent ne ""); EVENTS_ANALYSIS_RISK=(WinOfEvent="RISK"); EVENTS_ANALYSIS_CTRL=(WinOfEvent="CTRL"); NPTS_CENSOR_NOEVENTS=max(0,AnalysisCohort,CensorDeath,CensorEnrol,EVENTS_ANALYSIS_RISK,EVENTS_ANALYSIS_CTRL)=0; EPISODES_CENSOR_NOEVENTS=NPTS_CENSOR_NOEVENTS; TTE_VALUE=DAYS_FROM_EXPOS_TO_EVENT; %if "&censor" = "_censor" %then %do; TTC_VALUE=TTC; %end; patient=1; /*already calculated in cidanum*/ /* Pt_Exposure_Episode_Num Pt_Analysis_Episode_Num DAYS_FROM_EXPOS_TO_RISK_EVENT; DAYS_FROM_EXPOS_TO_CTRL_EVENT; DAYS_FROM_EXPOS_TO_EVENT;*/ end; run; %mend; /*Create geographic stratified tables - will do separately because geographic stratifications do not include month and include zip_uncertain. Include these in 1 table will lead to unncessary summarization calculations*/ %macro squaregeog(censor=); %let num_geog = %sysfunc(countw(&geog)); %put &num_geog; %do g = 1 %to %eval(&num_geog); %let geog_stratification = %scan(&geog., &g.); %put Squaring &geog_stratification.; %if "&geog_stratification" = "ZIP3" %then %do; %let select = substr(zip,1,3) as zip3; %end; %if "&geog_stratification" = "STATE" %then %do; %let select = statecode as state; %end; %if "&geog_stratification" = "HHS_REG" %then %do; %let select = hhs_region as hhs_reg; %end; %if "&geog_stratification" = "CB_REG" %then %do; %let select = cb_region as cb_reg; %end; proc sql noprint; create table _geogcodes as select distinct &select. format=$7. length=7 from infolder.&zipfile.; quit; /*Add Missing and Invalid rows*/ data _geogcodes; set _geogcodes end=eof; format &geog_stratification. $7.; output; if eof then do; &geog_stratification.='Missing'; output; &geog_stratification.='Invalid'; output; %if "&geog_stratification" = "HHS_REG" | "&geog_stratification" = "CB_REG" %then %do; &geog_stratification.='Other'; output; %end; end; run; /*drop month, TTE_VALUE, TTC_VALUE to prevent unnecessary calculations*/ data AGEYEARMONTHSEX&geog_stratification.; set AGEYEARMONTHSEX; drop month tt:; run; proc sort data=AGEYEARMONTHSEX&geog_stratification. nodup; by _all_; run; proc sql noprint undo_policy=none; create table AGEYEARMONTHSEX&geog_stratification. as select base.*, com.&geog_stratification. from AGEYEARMONTHSEX&geog_stratification. as base, _geogcodes as com; quit; proc datasets nowarn noprint lib=work; delete _uncertain _geogcodes; quit; *merge with _mstr; %createdata(table=&geog_stratification., censor=&censor); %end; %mend; /****************************************************************/ /* Squaring (or making sure all possible values are represented */ /****************************************************************/ data AgeYearMonthSex; merge infolder.&cohortfile.(drop=sex where=(strip(group)="&itgroup.")) infolder.&TYPE3FILE.(keep=group T3CtrlFrom T3CtrlTo T3RiskFrom T3RiskTo where=(strip(group)="&itgroup.")); by group; Type=3; format AgeGroup $9.; numgrp = countw("&AGESTRAT."," ") ; *Sumarization Vars; NPTS_EXPOSURE=0; NPTS_CENSOR_ELIG=0; NPTS_CENSOR_DTH=0; NPTS_CENSOR_NOEVENTS=0; NPTS_ANALYSIS=0; EPISODES_EXPOSURE=0; EPISODES_ANALYSIS=0; EVENTS_ANALYSIS_RISK=0; EVENTS_ANALYSIS_CTRL=0; MINDAYS_EVENT_ANALYSIS=0; MAXDAYS_EVENT_ANALYSIS=0; MINDAYS_POSTENR_EXPOSURE=0; MAXDAYS_POSTENR_EXPOSURE=0; EPISODES_CENSOR_ELIG=0; EPISODES_CENSOR_DTH=0; EPISODES_CENSOR_NOEVENTS=0; do i=1 to numgrp; AgeGroup=scan("&AGESTRAT",i," "); AgeGroupSort=i; do per=1 to &nummonths.; *create year month variables; date=intnx('month',&startfollowup.,per-1,'begin'); month=month(date); year=year(date); do TTE_VALUE=T3CtrlFrom to T3CtrlTo; TTC_VALUE=TTE_VALUE; sex="F";output; sex="M";output; sex="O";output; end; do TTE_VALUE=T3RiskFrom to T3RiskTo; TTC_VALUE=TTE_VALUE; sex="F";output; sex="M";output; sex="O";output; end; end; end; keep group Type AgeGroup AgeGroupSort sex year month NPTS_: EPISODES_: EVENTS_: MINDAYS_: MAXDAYS_: TTE_VALUE TTC_Value; run; %if "&race_out" = "Y" %then %do; proc sql noprint undo_policy=none; create table AgeYearMonthSex as select base.*, com.race from AgeYearMonthSex as base, _race as com; quit; %end; %if "&hispanic_out" = "Y" %then %do; proc sql noprint undo_policy=none; create table AgeYearMonthSex as select base.*, com.hispanic from AgeYearMonthSex as base, _hispanic as com; quit; %end; /*Square uncertain geography*/ %if %str(&geog.) ne %str() or %length(&geog.) > 0. %then %do; data _uncertain; zip_uncertain='N'; output; zip_uncertain='Y'; output; run; proc sql noprint undo_policy=none; create table AGEYEARMONTHSEX as select base.*, com.zip_uncertain from AGEYEARMONTHSEX as base, _uncertain as com; quit; %end; /*Create _mstr*/ %createdata(table=, censor=); %createdata(table=, censor=_censor); /*Square and create geographic tables*/ %if %str(&geog.) ne %str() or %length(&geog.) > 0. %then %do; %squaregeog(censor=); %squaregeog(censor=_censor); %END; /**********************/ /* Compute Numerators */ /**********************/ %macro createNumTableEntries(table=, class=,outfile=,level=); *One record per patient for the class stratification; proc means data=_mstr&table. nway noprint missing; var NPTS_EXPOSURE NPTS_CENSOR_ELIG NPTS_CENSOR_DTH NPTS_ANALYSIS EPISODES_EXPOSURE EPISODES_ANALYSIS EVENTS_ANALYSIS_RISK EVENTS_ANALYSIS_CTRL NPTS_CENSOR_NOEVENTS POSTENR_EXPOSURE DAYS_FROM_EXPOS_TO_EVENT; class type PatId &class.; id patient; output out=_num0(drop=_:) max(NPTS_EXPOSURE)=NPTS_EXPOSURE max(NPTS_CENSOR_ELIG)=NPTS_CENSOR_ELIG max(NPTS_CENSOR_DTH)=NPTS_CENSOR_DTH max(NPTS_ANALYSIS)=NPTS_ANALYSIS sum(EPISODES_EXPOSURE)=EPISODES_EXPOSURE sum(EPISODES_ANALYSIS)=EPISODES_ANALYSIS sum(EVENTS_ANALYSIS_RISK)=EVENTS_ANALYSIS_RISK sum(EVENTS_ANALYSIS_CTRL)=EVENTS_ANALYSIS_CTRL max(NPTS_CENSOR_NOEVENTS)=NPTS_CENSOR_NOEVENTS min(POSTENR_EXPOSURE)=MINDAYS_POSTENR_EXPOSURE max(POSTENR_EXPOSURE)=MAXDAYS_POSTENR_EXPOSURE min(DAYS_FROM_EXPOS_TO_EVENT)=MINDAYS_EVENT_ANALYSIS max(DAYS_FROM_EXPOS_TO_EVENT)=MAXDAYS_EVENT_ANALYSIS; run; *One record per patient for the class stratification; proc means data=_num0 missing nway noprint; var NPTS_EXPOSURE NPTS_CENSOR_ELIG NPTS_CENSOR_DTH NPTS_ANALYSIS EPISODES_EXPOSURE EPISODES_ANALYSIS EVENTS_ANALYSIS_RISK EVENTS_ANALYSIS_CTRL NPTS_CENSOR_NOEVENTS MINDAYS_POSTENR_EXPOSURE MAXDAYS_POSTENR_EXPOSURE MINDAYS_EVENT_ANALYSIS MAXDAYS_EVENT_ANALYSIS; class type &class.; output out=&outfile.(drop=_:) sum(NPTS_EXPOSURE NPTS_CENSOR_ELIG NPTS_CENSOR_DTH NPTS_ANALYSIS EPISODES_EXPOSURE EPISODES_ANALYSIS EVENTS_ANALYSIS_RISK EVENTS_ANALYSIS_CTRL NPTS_CENSOR_NOEVENTS)= Min(MINDAYS_POSTENR_EXPOSURE MINDAYS_EVENT_ANALYSIS)=MINDAYS_POSTENR_EXPOSURE MINDAYS_EVENT_ANALYSIS Max(MAXDAYS_POSTENR_EXPOSURE MAXDAYS_EVENT_ANALYSIS )=MAXDAYS_POSTENR_EXPOSURE MAXDAYS_EVENT_ANALYSIS; run; *One record per episode for the class stratification; proc means data=_mstr&table. nway noprint missing; var EPISODES_CENSOR_ELIG EPISODES_CENSOR_DTH EPISODES_CENSOR_NOEVENTS; class type &class.; output out=&outfile.2(drop=_:) sum(EPISODES_CENSOR_ELIG EPISODES_CENSOR_DTH EPISODES_CENSOR_NOEVENTS)=; run; data &outfile.; merge &outfile. &outfile.2; by type &class.; run; %IF "&level" = "000" %THEN %DO; data _NumCounts; *retain group sex agegroupsort year month DenNumPts DenNumMemDays; set &outfile.; format level $3. group $40.; Level="&level."; group = "&ITGROUP."; run; %END; %ELSE %DO; data _NumCounts; *retain group sex agegroupsort year month DenNumPts DenNumMemDays; set _NumCounts &outfile.(in=a); if a then do; Level="&level."; group = "&ITGROUP."; end; run; %END; %mend; ********** *No Censor **********; *Overall; %createNumTableEntries(table=,class=,outfile=_ALL,level=000); *Base Tables; %createNumTableEntries(table=,class=year,outfile=_Y,Level=001); %createNumTableEntries(table=,class=Sex,outfile=_S,Level=002); %createNumTableEntries(table=,class=AgeGroup agegroupsort,outfile=_AG,Level=003); %createNumTableEntries(table=,class=Sex AgeGroup agegroupsort,outfile=_SAG,Level=004); %createNumTableEntries(table=,class=Sex AgeGroup agegroupsort year,outfile=_SAGY,Level=005); %createNumTableEntries(table=,class=Sex AgeGroup agegroupsort year month,outfile=_SAGYM,Level=006); %createNumTableEntries(table=,class=AgeGroup agegroupsort year,outfile=_AGY,Level=007); %createNumTableEntries(table=,class=AgeGroup agegroupsort year month,outfile=_AGYM,Level=008); %createNumTableEntries(table=,class=Sex year,outfile=_SY,Level=009); %createNumTableEntries(table=,class=Sex year month,outfile=_SYM,Level=010); %createNumTableEntries(table=,class=year month,outfile=_YM,Level=011); *TTE_VALUE Tables; %createNumTableEntries(table=,class=year TTE_VALUE,outfile=_Y_TTE,Level=401); %createNumTableEntries(table=,class=Sex TTE_VALUE,outfile=_S_TTE,Level=402); %createNumTableEntries(table=,class=AgeGroup agegroupsort TTE_VALUE,outfile=_AG_TTE,Level=403); %createNumTableEntries(table=,class=Sex AgeGroup agegroupsort TTE_VALUE,outfile=_SAG_TTE,Level=404); %createNumTableEntries(table=,class=Sex AgeGroup agegroupsort year TTE_VALUE,outfile=_SAGY_TTE,Level=405); %createNumTableEntries(table=,class=Sex AgeGroup agegroupsort year month TTE_VALUE,outfile=_SAGYM_TTE,Level=406); %createNumTableEntries(table=,class=AgeGroup agegroupsort year TTE_VALUE,outfile=_AGY_TTE,Level=407); %createNumTableEntries(table=,class=AgeGroup agegroupsort year month TTE_VALUE,outfile=_AGYM_TTE,Level=408); %createNumTableEntries(table=,class=Sex year TTE_VALUE,outfile=_SY_TTE,Level=409); %createNumTableEntries(table=,class=Sex year month TTE_VALUE,outfile=_SYM_TTE,Level=410); %createNumTableEntries(table=,class=year month TTE_VALUE,outfile=_YM_TTE,Level=411); %createNumTableEntries(table=,class=TTE_VALUE,outfile=_TTE,Level=412); *Race; %if "&race_out" = "Y" %then %do; %createNumTableEntries(table=,class=sex race,outfile=_RS,Level=413); %createNumTableEntries(table=,class=race agegroup agegroupsort,outfile=_RAG,Level=414); %createNumTableEntries(table=,class=race year,outfile=_RY,Level=415); %createNumTableEntries(table=,class=race year month,outfile=_RYM,Level=416); %createNumTableEntries(table=,class=race TTE_VALUE,outfile=_R_TTE,Level=417); %createNumTableEntries(table=,class=race sex TTE_VALUE,outfile=_RS_TTE,Level=418); %createNumTableEntries(table=,class=race agegroup agegroupsort TTE_VALUE,outfile=_RAG_TTE,Level=419); %createNumTableEntries(table=,class=race year TTE_VALUE,outfile=_RY_TTE,Level=420); %end; *Hispanic; %if "&hispanic_out" = "Y" %then %do; %createNumTableEntries(table=,class=sex hispanic,outfile=_HS,Level=421); %createNumTableEntries(table=,class=hispanic agegroup agegroupsort,outfile=_HAG,Level=422); %createNumTableEntries(table=,class=hispanic year,outfile=_HY,Level=423); %createNumTableEntries(table=,class=hispanic year month,outfile=_HYM,Level=424); %createNumTableEntries(table=,class=hispanic TTE_VALUE,outfile=_H_TTE,Level=425); %createNumTableEntries(table=,class=hispanic sex TTE_VALUE,outfile=_HS_TTE,Level=426); %createNumTableEntries(table=,class=hispanic agegroup agegroupsort TTE_VALUE,outfile=_HAG_TTE,Level=427); %createNumTableEntries(table=,class=hispanic year TTE_VALUE,outfile=_HY_TTE,Level=428); %end; *Geographic tables; %if %index(&geog.,ZIP3) > 0 %then %do; %createNumTableEntries(table=ZIP3,class=zip3,outfile=_Z,Level=020); %createNumTableEntries(table=ZIP3,class=zip3 zip_uncertain,outfile=_Z_UN,Level=021); %createNumTableEntries(table=ZIP3,class=zip3 Sex,outfile=_Z_S,Level=022); %createNumTableEntries(table=ZIP3,class=zip3 Sex zip_uncertain,outfile=_Z_S_UN,Level=023); %createNumTableEntries(table=ZIP3,class=zip3 AgeGroup agegroupsort,outfile=_Z_AG,Level=024); %createNumTableEntries(table=ZIP3,class=zip3 AgeGroup agegroupsort zip_uncertain ,outfile=_Z_AG_UN,Level=025); %createNumTableEntries(table=ZIP3,class=zip3 year,outfile=_Z_Y,Level=026); %createNumTableEntries(table=ZIP3,class=zip3 year zip_uncertain,outfile=_Z_Y_UN,Level=027); *Race/Hispanic Tables; %if "&race_out" = "Y" %then %do; %createNumTableEntries(table=ZIP3,class=zip3 race,outfile=_Z_R,Level=028); %createNumTableEntries(table=ZIP3,class=zip3 race zip_uncertain,outfile=_Z_R_UN,Level=029); %end; %if "&hispanic_out" = "Y" %then %do; %createNumTableEntries(table=ZIP3,class=zip3 hispanic,outfile=_Z_H,Level=030); %createNumTableEntries(table=ZIP3,class=zip3 hispanic zip_uncertain,outfile=_Z_H_UN,Level=031); %end; %end; %if %index(&geog.,STATE) > 0 %then %do; %createNumTableEntries(table=STATE,class=STATE,outfile=_S,Level=040); %createNumTableEntries(table=STATE,class=STATE zip_uncertain,outfile=_S_UN,Level=041); %createNumTableEntries(table=STATE,class=STATE Sex,outfile=_S_S,Level=042); %createNumTableEntries(table=STATE,class=STATE Sex zip_uncertain,outfile=_S_S_UN,Level=043); %createNumTableEntries(table=STATE,class=STATE AgeGroup agegroupsort,outfile=_S_AG,Level=044); %createNumTableEntries(table=STATE,class=STATE AgeGroup agegroupsort zip_uncertain ,outfile=_S_AG_UN,Level=045); %createNumTableEntries(table=STATE,class=STATE year,outfile=_S_Y,Level=046); %createNumTableEntries(table=STATE,class=STATE year zip_uncertain,outfile=_S_Y_UN,Level=047); *Race/Hispanic Tables; %if "&race_out" = "Y" %then %do; %createNumTableEntries(table=STATE,class=STATE race,outfile=_S_R,Level=048); %createNumTableEntries(table=STATE,class=STATE race zip_uncertain,outfile=_S_R_UN,Level=049); %end; %if "&hispanic_out" = "Y" %then %do; %createNumTableEntries(table=STATE,class=STATE hispanic,outfile=_S_H,Level=050); %createNumTableEntries(table=STATE,class=STATE hispanic zip_uncertain,outfile=_S_H_UN,Level=051); %end; %end; %if %index(&geog.,HHS_REG) > 0 %then %do; %createNumTableEntries(table=HHS_REG,class=HHS_REG,outfile=_HHS,Level=070); %createNumTableEntries(table=HHS_REG,class=HHS_REG zip_uncertain,outfile=_HHS_UN,Level=071); %createNumTableEntries(table=HHS_REG,class=HHS_REG Sex,outfile=_HHS_S,Level=072); %createNumTableEntries(table=HHS_REG,class=HHS_REG Sex zip_uncertain,outfile=_HHS_S_UN,Level=073); %createNumTableEntries(table=HHS_REG,class=HHS_REG AgeGroup agegroupsort,outfile=_HHS_AG,Level=074); %createNumTableEntries(table=HHS_REG,class=HHS_REG AgeGroup agegroupsort zip_uncertain ,outfile=_HHS_AG_UN,Level=075); %createNumTableEntries(table=HHS_REG,class=HHS_REG year,outfile=_HHS_Y,Level=076); %createNumTableEntries(table=HHS_REG,class=HHS_REG year zip_uncertain,outfile=_HHS_Y_UN,Level=077); *Race/Hispanic Tables; %if "&race_out" = "Y" %then %do; %createNumTableEntries(table=HHS_REG,class=HHS_REG race,outfile=_HHS_R,Level=078); %createNumTableEntries(table=HHS_REG,class=HHS_REG race zip_uncertain,outfile=_HHS_R_UN,Level=079); %end; %if "&hispanic_out" = "Y" %then %do; %createNumTableEntries(table=HHS_REG,class=HHS_REG hispanic,outfile=_HHS_H,Level=080); %createNumTableEntries(table=HHS_REG,class=HHS_REG hispanic zip_uncertain,outfile=_HHS_H_UN,Level=081); %end; %end; %if %index(&geog.,CB_REG) > 0 %then %do; %createNumTableEntries(table=CB_REG,class=CB_REG,outfile=_CB,Level=090); %createNumTableEntries(table=CB_REG,class=CB_REG zip_uncertain,outfile=_CB_UN,Level=091); %createNumTableEntries(table=CB_REG,class=CB_REG Sex,outfile=_CB_S,Level=092); %createNumTableEntries(table=CB_REG,class=CB_REG Sex zip_uncertain,outfile=_CB_S_UN,Level=093); %createNumTableEntries(table=CB_REG,class=CB_REG AgeGroup agegroupsort,outfile=_CB_AG,Level=094); %createNumTableEntries(table=CB_REG,class=CB_REG AgeGroup agegroupsort zip_uncertain ,outfile=_CB_AG_UN,Level=095); %createNumTableEntries(table=CB_REG,class=CB_REG year,outfile=_CB_Y,Level=096); %createNumTableEntries(table=CB_REG,class=CB_REG year zip_uncertain,outfile=_CB_Y_UN,Level=097); *Race/Hispanic Tables; %if "&race_out" = "Y" %then %do; %createNumTableEntries(table=CB_REG,class=CB_REG race,outfile=_CB_R,Level=098); %createNumTableEntries(table=CB_REG,class=CB_REG race zip_uncertain,outfile=_CB_R_UN,Level=099); %end; %if "&hispanic_out" = "Y" %then %do; %createNumTableEntries(table=CB_REG,class=CB_REG hispanic,outfile=_CB_H,Level=100); %createNumTableEntries(table=CB_REG,class=CB_REG hispanic zip_uncertain,outfile=_CB_H_UN,Level=101); %end; %end; *Uncertain Geographic; %if %str(&geog.) ne %str() or %length(&geog.) > 0. %then %do; %createNumTableEntries(table=,class=zip_uncertain,outfile=ZU,Level=060); %createNumTableEntries(table=,class=zip_uncertain sex,outfile=ZU_S,Level=061); %createNumTableEntries(table=,class=zip_uncertain agegroup,outfile=ZU_AG,Level=062); %createNumTableEntries(table=,class=zip_uncertain year,outfile=ZU_Y,Level=063); %end; ******* *Censor *******; *Overall; %createNumTableEntries(table=_censor,class=,outfile=_ALL,level=120); *Base Tables; %createNumTableEntries(table=_censor,class=year,outfile=_Y,Level=121); %createNumTableEntries(table=_censor,class=Sex,outfile=_S,Level=122); %createNumTableEntries(table=_censor,class=AgeGroup agegroupsort,outfile=_AG,Level=123); %createNumTableEntries(table=_censor,class=Sex AgeGroup agegroupsort,outfile=_SAG,Level=124); %createNumTableEntries(table=_censor,class=Sex AgeGroup agegroupsort year,outfile=_SAGY,Level=125); %createNumTableEntries(table=_censor,class=Sex AgeGroup agegroupsort year month,outfile=_SAGYM,Level=126); %createNumTableEntries(table=_censor,class=AgeGroup agegroupsort year,outfile=_AGY,Level=127); %createNumTableEntries(table=_censor,class=AgeGroup agegroupsort year month,outfile=_AGYM,Level=128); %createNumTableEntries(table=_censor,class=Sex year,outfile=_SY,Level=129); %createNumTableEntries(table=_censor,class=Sex year month,outfile=_SYM,Level=130); %createNumTableEntries(table=_censor,class=year month,outfile=_YM,Level=131); *TTE_VALUE Tables; %createNumTableEntries(table=_censor,class=year TTE_VALUE,outfile=_Y_TTE,Level=441); %createNumTableEntries(table=_censor,class=Sex TTE_VALUE,outfile=_S_TTE,Level=442); %createNumTableEntries(table=_censor,class=AgeGroup agegroupsort TTE_VALUE,outfile=_AG_TTE,Level=443); %createNumTableEntries(table=_censor,class=Sex AgeGroup agegroupsort TTE_VALUE,outfile=_SAG_TTE,Level=444); %createNumTableEntries(table=_censor,class=Sex AgeGroup agegroupsort year TTE_VALUE,outfile=_SAGY_TTE,Level=445); %createNumTableEntries(table=_censor,class=Sex AgeGroup agegroupsort year month TTE_VALUE,outfile=_SAGYM_TTE,Level=446); %createNumTableEntries(table=_censor,class=AgeGroup agegroupsort year TTE_VALUE,outfile=_AGY_TTE,Level=447); %createNumTableEntries(table=_censor,class=AgeGroup agegroupsort year month TTE_VALUE,outfile=_AGYM_TTE,Level=448); %createNumTableEntries(table=_censor,class=Sex year TTE_VALUE,outfile=_SY_TTE,Level=449); %createNumTableEntries(table=_censor,class=Sex year month TTE_VALUE,outfile=_SYM_TTE,Level=450); %createNumTableEntries(table=_censor,class=year month TTE_VALUE,outfile=_YM_TTE,Level=451); %createNumTableEntries(table=_censor,class=TTE_VALUE,outfile=_TTE,Level=452); *TTC_VALUE Tables; %createNumTableEntries(table=_censor,class=year TTE_VALUE TTC_VALUE,outfile=_Y_TTE,Level=901); %createNumTableEntries(table=_censor,class=Sex TTE_VALUE TTC_VALUE,outfile=_S_TTE,Level=902); %createNumTableEntries(table=_censor,class=AgeGroup agegroupsort TTE_VALUE TTC_VALUE,outfile=_AG_TTE,Level=903); %createNumTableEntries(table=_censor,class=Sex AgeGroup agegroupsort TTE_VALUE TTC_VALUE,outfile=_SAG_TTE,Level=904); %createNumTableEntries(table=_censor,class=Sex AgeGroup agegroupsort year TTE_VALUE TTC_VALUE,outfile=_SAGY_TTE,Level=905); %createNumTableEntries(table=_censor,class=Sex AgeGroup agegroupsort year month TTE_VALUE TTC_VALUE,outfile=_SAGYM_TTE,Level=906); %createNumTableEntries(table=_censor,class=AgeGroup agegroupsort year TTE_VALUE TTC_VALUE,outfile=_AGY_TTE,Level=907); %createNumTableEntries(table=_censor,class=AgeGroup agegroupsort year month TTE_VALUE TTC_VALUE,outfile=_AGYM_TTE,Level=908); %createNumTableEntries(table=_censor,class=Sex year TTE_VALUE TTC_VALUE,outfile=_SY_TTE,Level=909); %createNumTableEntries(table=_censor,class=Sex year month TTE_VALUE TTC_VALUE,outfile=_SYM_TTE,Level=910); %createNumTableEntries(table=_censor,class=year month TTE_VALUE TTC_VALUE,outfile=_YM_TTE,Level=911); %createNumTableEntries(table=_censor,class=TTE_VALUE TTC_VALUE,outfile=_TTE,Level=912); %createNumTableEntries(table=_censor,class=TTC_VALUE,outfile=_TTC,Level=913); *race; %if "&race_out" = "Y" %then %do; %createNumTableEntries(table=_censor,class=sex race,outfile=_RS,Level=453); %createNumTableEntries(table=_censor,class=race agegroup agegroupsort,outfile=_RAG,Level=454); %createNumTableEntries(table=_censor,class=race year,outfile=_RY,Level=455); %createNumTableEntries(table=_censor,class=race year month,outfile=_RYM,Level=456); %createNumTableEntries(table=_censor,class=race TTE_VALUE,outfile=_R_TTE,Level=457); %createNumTableEntries(table=_censor,class=race sex TTE_VALUE,outfile=_RS_TTE,Level=458); %createNumTableEntries(table=_censor,class=race agegroup agegroupsort TTE_VALUE,outfile=_RAG_TTE,Level=459); %createNumTableEntries(table=_censor,class=race year TTE_VALUE,outfile=_RY_TTE,Level=460); %createNumTableEntries(table=_censor,class=race TTC_VALUE TTE_VALUE,outfile=_R_TTE_TTC,Level=914); %end; *Hispanic; %if "&hispanic_out" = "Y" %then %do; %createNumTableEntries(table=_censor,class=sex hispanic,outfile=_HS,Level=461); %createNumTableEntries(table=_censor,class=hispanic agegroup agegroupsort,outfile=_HAG,Level=462); %createNumTableEntries(table=_censor,class=hispanic year,outfile=_HY,Level=463); %createNumTableEntries(table=_censor,class=hispanic year month,outfile=_HYM,Level=464); %createNumTableEntries(table=_censor,class=hispanic TTE_VALUE,outfile=_H_TTE,Level=465); %createNumTableEntries(table=_censor,class=hispanic sex TTE_VALUE,outfile=_HS_TTE,Level=466); %createNumTableEntries(table=_censor,class=hispanic agegroup agegroupsort TTE_VALUE,outfile=_HAG_TTE,Level=467); %createNumTableEntries(table=_censor,class=hispanic year TTE_VALUE,outfile=_HY_TTE,Level=468); %createNumTableEntries(table=_censor,class=hispanic TTC_VALUE TTE_VALUE,outfile=_H_TTE_TTC,Level=915); %end; *Geographic tables; %if %index(&geog.,ZIP3) > 0 %then %do; %createNumTableEntries(table=_censorZIP3,class=zip3,outfile=_Z,Level=132); %createNumTableEntries(table=_censorZIP3,class=zip3 zip_uncertain,outfile=_Z_UN,Level=133); %createNumTableEntries(table=_censorZIP3,class=zip3 Sex,outfile=_Z_S,Level=134); %createNumTableEntries(table=_censorZIP3,class=zip3 Sex zip_uncertain,outfile=_Z_S_UN,Level=135); %createNumTableEntries(table=_censorZIP3,class=zip3 AgeGroup agegroupsort,outfile=_Z_AG,Level=136); %createNumTableEntries(table=_censorZIP3,class=zip3 AgeGroup agegroupsort zip_uncertain ,outfile=_Z_AG_UN,Level=137); %createNumTableEntries(table=_censorZIP3,class=zip3 year,outfile=_Z_Y,Level=138); %createNumTableEntries(table=_censorZIP3,class=zip3 year zip_uncertain,outfile=_Z_Y_UN,Level=139); *Race/Hispanic Tables; %if "&race_out" = "Y" %then %do; %createNumTableEntries(table=_censorZIP3,class=zip3 race,outfile=_Z_R,Level=140); %createNumTableEntries(table=_censorZIP3,class=zip3 race zip_uncertain,outfile=_Z_R_UN,Level=141); %end; %if "&hispanic_out" = "Y" %then %do; %createNumTableEntries(table=_censorZIP3,class=zip3 hispanic,outfile=_Z_H,Level=142); %createNumTableEntries(table=_censorZIP3,class=zip3 hispanic zip_uncertain,outfile=_Z_H_UN,Level=143); %end; %end; %if %index(&geog.,STATE) > 0 %then %do; %createNumTableEntries(table=_censorSTATE,class=STATE,outfile=_S,Level=144); %createNumTableEntries(table=_censorSTATE,class=STATE zip_uncertain,outfile=_S_UN,Level=145); %createNumTableEntries(table=_censorSTATE,class=STATE Sex,outfile=_S_S,Level=146); %createNumTableEntries(table=_censorSTATE,class=STATE Sex zip_uncertain,outfile=_S_S_UN,Level=147); %createNumTableEntries(table=_censorSTATE,class=STATE AgeGroup agegroupsort,outfile=_S_AG,Level=148); %createNumTableEntries(table=_censorSTATE,class=STATE AgeGroup agegroupsort zip_uncertain ,outfile=_S_AG_UN,Level=149); %createNumTableEntries(table=_censorSTATE,class=STATE year,outfile=_S_Y,Level=150); %createNumTableEntries(table=_censorSTATE,class=STATE year zip_uncertain,outfile=_S_Y_UN,Level=151); *Race/Hispanic Tables; %if "&race_out" = "Y" %then %do; %createNumTableEntries(table=_censorSTATE,class=STATE race,outfile=_S_R,Level=152); %createNumTableEntries(table=_censorSTATE,class=STATE race zip_uncertain,outfile=_S_R_UN,Level=153); %end; %if "&hispanic_out" = "Y" %then %do; %createNumTableEntries(table=_censorSTATE,class=STATE hispanic,outfile=_S_H,Level=154); %createNumTableEntries(table=_censorSTATE,class=STATE hispanic zip_uncertain,outfile=_S_H_UN,Level=155); %end; %end; %if %index(&geog.,HHS_REG) > 0 %then %do; %createNumTableEntries(table=_censorHHS_REG,class=HHS_REG,outfile=_HHS,Level=160); %createNumTableEntries(table=_censorHHS_REG,class=HHS_REG zip_uncertain,outfile=_HHS_UN,Level=161); %createNumTableEntries(table=_censorHHS_REG,class=HHS_REG Sex,outfile=_HHS_S,Level=162); %createNumTableEntries(table=_censorHHS_REG,class=HHS_REG Sex zip_uncertain,outfile=_HHS_S_UN,Level=163); %createNumTableEntries(table=_censorHHS_REG,class=HHS_REG AgeGroup agegroupsort,outfile=_HHS_AG,Level=164); %createNumTableEntries(table=_censorHHS_REG,class=HHS_REG AgeGroup agegroupsort zip_uncertain ,outfile=_HHS_AG_UN,Level=165); %createNumTableEntries(table=_censorHHS_REG,class=HHS_REG year,outfile=_HHS_Y,Level=166); %createNumTableEntries(table=_censorHHS_REG,class=HHS_REG year zip_uncertain,outfile=_HHS_Y_UN,Level=167); *Race/Hispanic Tables; %if "&race_out" = "Y" %then %do; %createNumTableEntries(table=_censorHHS_REG,class=HHS_REG race,outfile=_HHS_R,Level=168); %createNumTableEntries(table=_censorHHS_REG,class=HHS_REG race zip_uncertain,outfile=_HHS_R_UN,Level=169); %end; %if "&hispanic_out" = "Y" %then %do; %createNumTableEntries(table=_censorHHS_REG,class=HHS_REG hispanic,outfile=_HHS_H,Level=170); %createNumTableEntries(table=_censorHHS_REG,class=HHS_REG hispanic zip_uncertain,outfile=_HHS_H_UN,Level=171); %end; %end; %if %index(&geog.,CB_REG) > 0 %then %do; %createNumTableEntries(table=_censorCB_REG,class=CB_REG,outfile=_CB,Level=172); %createNumTableEntries(table=_censorCB_REG,class=CB_REG zip_uncertain,outfile=_CB_UN,Level=173); %createNumTableEntries(table=_censorCB_REG,class=CB_REG Sex,outfile=_CB_S,Level=174); %createNumTableEntries(table=_censorCB_REG,class=CB_REG Sex zip_uncertain,outfile=_CB_S_UN,Level=175); %createNumTableEntries(table=_censorCB_REG,class=CB_REG AgeGroup agegroupsort,outfile=_CB_AG,Level=176); %createNumTableEntries(table=_censorCB_REG,class=CB_REG AgeGroup agegroupsort zip_uncertain ,outfile=_CB_AG_UN,Level=177); %createNumTableEntries(table=_censorCB_REG,class=CB_REG year,outfile=_CB_Y,Level=178); %createNumTableEntries(table=_censorCB_REG,class=CB_REG year zip_uncertain,outfile=_CB_Y_UN,Level=179); *Race/Hispanic Tables; %if "&race_out" = "Y" %then %do; %createNumTableEntries(table=_censorCB_REG,class=CB_REG race,outfile=_CB_R,Level=180); %createNumTableEntries(table=_censorCB_REG,class=CB_REG race zip_uncertain,outfile=_CB_R_UN,Level=181); %end; %if "&hispanic_out" = "Y" %then %do; %createNumTableEntries(table=_censorCB_REG,class=CB_REG hispanic,outfile=_CB_H,Level=182); %createNumTableEntries(table=_censorCB_REG,class=CB_REG hispanic zip_uncertain,outfile=_CB_H_UN,Level=183); %end; %end; *Uncertain Geographic; %if %str(&geog.) ne %str() or %length(&geog.) > 0. %then %do; %createNumTableEntries(table=_censor,class=zip_uncertain,outfile=ZU,Level=156); %createNumTableEntries(table=_censor,class=zip_uncertain sex,outfile=ZU_S,Level=157); %createNumTableEntries(table=_censor,class=zip_uncertain agegroup,outfile=ZU_AG,Level=158); %createNumTableEntries(table=_censor,class=zip_uncertain year,outfile=ZU_Y,Level=159); %end; data _NumCounts; set _NumCounts(rename=agegroupsort=agegroupnum); length race hispanic zip_uncertain $1. zip3 state hhs_reg cb_reg $7.; %if "&race_out" = "N" %then %do; race = ''; %end; %if "&hispanic_out" = "N" %then %do; hispanic = ''; %end; %if %index(&geog, ZIP3) = 0 %then %do; zip3 = ''; %end; %if %index(&geog, STATE) = 0 %then %do; state = ''; %end; %if %index(&geog, HHS_REG) = 0 %then %do; hhs_reg = ''; %end; %if %index(&geog, CB_REG) = 0 %then %do; cb_reg = ''; %end; %if %str(&geog.) = %str() or %length(&geog.) = 0. %then %do; zip_uncertain = ''; %end; run; proc sort data=_NumCounts; by group Level sex agegroupnum year month zip3 state hhs_reg cb_reg zip_uncertain race hispanic ; run; /*output to DPLOCAL and MSOC*/ %IF %EVAL(&group.=1) %THEN %DO; data DPLOCAL.&RUNID._numcounts; set _NumCounts; run; data MSOC.&RUNID._t&type._cida; retain group level sex agegroup agegroupnum year month zip3 state hhs_reg cb_reg zip_uncertain race hispanic TTE_VALUE TTC_VALUE NPTS_EXPOSURE NPTS_ANALYSIS EPISODES_EXPOSURE EPISODES_ANALYSIS NPTS_CENSOR_ELIG NPTS_CENSOR_DTH EVENTS_ANALYSIS_RISK EVENTS_ANALYSIS_CTRL MINDAYS_EVENT_ANALYSIS MAXDAYS_EVENT_ANALYSIS MINDAYS_POSTENR_EXPOSURE NPTS_CENSOR_NOEVENTS MINDAYS_POSTENR_EXPOSURE MAXDAYS_POSTENR_EXPOSURE EPISODES_CENSOR_ELIG EPISODES_CENSOR_DTH EPISODES_CENSOR_NOEVENTS; set _NumCounts; keep group level sex agegroup agegroupnum year month zip3 state hhs_reg cb_reg zip_uncertain race hispanic TTE_VALUE TTC_VALUE NPTS_EXPOSURE NPTS_CENSOR_ELIG NPTS_CENSOR_DTH NPTS_CENSOR_NOEVENTS NPTS_ANALYSIS EPISODES_EXPOSURE EPISODES_ANALYSIS EVENTS_ANALYSIS_RISK EVENTS_ANALYSIS_CTRL MINDAYS_EVENT_ANALYSIS MAXDAYS_EVENT_ANALYSIS MINDAYS_POSTENR_EXPOSURE MAXDAYS_POSTENR_EXPOSURE EPISODES_CENSOR_ELIG EPISODES_CENSOR_DTH EPISODES_CENSOR_NOEVENTS; run; %END; %ELSE %DO; proc append base=DPLOCAL.&RUNID._numcounts data=_NumCounts force; run; proc append base=MSOC.&RUNID._t&type._cida data=_NumCounts(keep=group level sex agegroup agegroupnum year month zip3 state hhs_reg cb_reg zip_uncertain race hispanic TTE_VALUE TTC_VALUE NPTS_EXPOSURE NPTS_CENSOR_ELIG NPTS_CENSOR_DTH NPTS_CENSOR_NOEVENTS NPTS_ANALYSIS EPISODES_EXPOSURE EPISODES_ANALYSIS EVENTS_ANALYSIS_RISK EVENTS_ANALYSIS_CTRL MINDAYS_EVENT_ANALYSIS MAXDAYS_EVENT_ANALYSIS MINDAYS_POSTENR_EXPOSURE MAXDAYS_POSTENR_EXPOSURE EPISODES_CENSOR_ELIG EPISODES_CENSOR_DTH EPISODES_CENSOR_NOEVENTS) force; run; %END; proc datasets library=work nolist nowarn; delete &RUNID._mstr; quit; %put NOTE: ******** END OF MACRO: ms_cidatablest3 v2.2 ********; %mend ms_cidatablest3;