****************************************************************************************************
* PROGRAM OVERVIEW
****************************************************************************************************
*
* PROGRAM: t4tables_createdata.sas
* Created (mm/dd/yyyy): 08/06/2021
*
*--------------------------------------------------------------------------------------------------
* PURPOSE: The macro produces tables for a Type 4 report
*
* Program inputs:
* - agg_t4preg.sas7bdat
* - agg_t4nopreg.sas7bdat
* - agg_t4preggestwk.sas7bdat
* - agg_t4nopreggestwk.sas7bdat
*
* Program outputs:
* - final_t4moi - levelid and moiname stratification across data partners
* - final_dps_t4moi - levelid and moiname stratification by data partner
* - final_t4gestwk - moiname and gestwk stratification across data partners
* - final_dps_t4gestwk - moiname and gestwk stratification by data partner
*
* PARAMETERS:
* - dataset = suffix for input dataset indicator
* - output_suffix = suffix for output dataset name
* - episode_var: variable that holds # of pregnancy episodes
*
* Programming Notes:
*
*
*--------------------------------------------------------------------------------------------------
* CONTACT INFO:
* Sentinel Coordinating Center
* info@sentinelsystem.org
*
***************************************************************************************************;
%macro t4tables_createdata(dataset = , output_suffix = , episode_var = );
%put =====> MACRO CALLED: t4tables_createdata ;
/*********************************************************************************************************
Determine total count of variables on table and put tablecolumns information into macro variables
- For tables T1-T4, there is a 1:1 relationship between rows in TABLECOLUMNS and columns in the table
- For tables T5-T6, TABLECOLUMNS only contains 3 possible columns, this table will be expanded for
each gestational week after table information is assigned to macro variables
********************************************************************************************************/
proc sql noprint;
select distinct(compress(table)) into: tables separated by '" "'
from tablefile where dataset in ("t4&dataset." "t4no&dataset.");
select count(column) into: numcolumns trimmed
from tablecolumns where table in ("&tables.");
select columnname
,column
,columnlabel
,columnformat
,scan(compress(column,'()'),1,'/') as numerator
,case when index(column,'/') = 0 then ''
when index(column,'*') > 0 then cats("den_",scan(compress(scan(column,1,'*'),'()'),2,'/'))
else cats("den_",scan(column,2,'/')) end as denominator
,case when index(columnformat,'$') > 0 then columnformat
else compress('$'||put(input(scan(compress(columnformat,'','a'),1,'.'),3.) + input(scan(compress(columnformat,'','a'),2,'.'),3.),8.)||".") end as columnformatchar
into: var1 -:var&numcolumns.
,:formula1 - :formula&numcolumns.
,:label1 - :label&numcolumns.
,:format1 - :format&numcolumns.
,:num1 - :num&numcolumns.
,:denominator1 - :denominator&numcolumns.
,:formatchar1 - :formatchar&numcolumns.
from tablecolumns where table in ("&tables.");
select distinct(a.numerator)
into: sumcolumns separated by " "
from (select case when index(column,'/') > 0 then scan(compress(column,'()'),1,'/')
else column end as numerator from tablecolumns where table in ("&tables.")) a;
quit;
/*Expand table to 1 row per gestional week*/
%if &dataset. = preggestwk %then %do;
/* Identify min gestwk requested. Max always 44 weeks */
data master_typefile;
set master_typefile;
length gestwk_min gestwk_max 3;
if prepregdays >0 then gestwk_min = int((-prepregdays/7)-1);
else gestwk_min = 0;
gestwk_max = 44;
run;