****************************************************************************************************
*                                           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;