/*-------------------------------------------------------------------------------------*\
|  PROGRAM NAME:                                                                        |
|     scdm_data_qa_review-vitalsigns.sas                                                |
|                                                                                       |
|---------------------------------------------------------------------------------------|
|  PURPOSE:                                                                             |
|     The purpose of this program is to perform data quality checks on the Vitals       |
|     table.                                                                            |
|---------------------------------------------------------------------------------------|
|  PROGRAM INPUT:                                                                       |
|     see 00.0_scdm_data_qa_review_master_file.sas                                      |
|                                                                                       |
|  PROGRAM OUTPUT:                                                                      |
|     see Workplan PDF                                                                  |
|---------------------------------------------------------------------------------------|
|  CONTACT:                                                                             |
|     Sentinel Coordinating Center                                                      |
|     info@sentinelsystem.org                                                           |
\*-------------------------------------------------------------------------------------*/

*-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-;
*  PLEASE DO NOT EDIT BELOW WITHOUT CONTACTING THE SENTINEL OPERATIONS CENTER           ;
*-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-;

%let qa_table= ;
%macro get_qa_table ;
  %if &do_partitions and not %eval(&module in &tabid_exc) %then %do ;
    data t_view /view=t_view ;
      set qadata.&&&module.table.: (keep=measure_date ht wt diastolic systolic BP_Type Position Tobacco Tobacco_Type) ;
    run;
    %let qa_table = t_view ;
  %end ;
  %else %do;
    %let qa_table = qadata.&&&module.table (keep=measure_date ht wt diastolic systolic BP_Type Position Tobacco Tobacco_Type);
  %end;
%mend;
%get_qa_table ;
proc sql noprint;
  create table dplocal.&module._temp as
  select measure_date
       , ht
       , wt
       , diastolic
       , systolic
       , BP_Type
       , Position
       , Tobacco
       , Tobacco_Type
       , count(*) as n
  from &qa_table
  group by 1,2,3,4,5,6,7,8,9
  ;
quit;
%remove_labels(dplocal, &module._temp);

/*-------------------------------------------------------------------------------------*/
/*  START Level 2 Data                                                                 */
/*-------------------------------------------------------------------------------------*/
%let level=2;

proc sql noprint;
  create table msoc.&module._l2_bp_catvar_ym as
  select put(measure_date,yymmd.) as YearMonth
       , BP_Type 
          , Position
       , sum(n) as count format=comma15.
  from dplocal.&module._temp (keep=measure_date BP_type Position n)
  group by 1,2,3
  ;
  create table msoc.&module._l2_tobacco_ym as
  select put(measure_date,yymmd.) as YearMonth
       , Tobacco
          , Tobacco_Type
       , sum(n) as count format=comma15.
  from dplocal.&module._temp (keep=measure_date Tobacco Tobacco_Type n)
  group by 1,2,3
  ;
quit;

/*-------------------------------------------------------------------------------------*/
/*  START Level 2 Flags                                                                */
/*-------------------------------------------------------------------------------------*/
%level2;

/*-------------------------------------------------------------------------------------*/
/*  START Level 3 Data                                                                 */
/*-------------------------------------------------------------------------------------*/
%let level=3;

proc sql noprint;
  create table dplocal.&module._temp_date as
  select measure_date
       , sum(n) as n
  from dplocal.&module._temp (keep=measure_date n)
  group by 1
  ;
  drop table dplocal.&module._temp
  ;
quit;
%date_percentiles (libin=dplocal, dsin=&module._temp_date
                , libout=dplocal, dsout=date_dist_&module., vars=measure_date);

proc sql noprint;
  drop table dplocal.&module._temp_date
  ;
  create table msoc.&module._l3_measure_date_ym as
  select YearMonth
       , sum(count) as count format=comma15.
  from msoc.&module._l2_bp_catvar_ym (keep=yearmonth count)
  group by 1
  ;
quit;

/* add msoc table for patid and encounterid stats */
%macro get_qa_table ;
  %if &do_partitions and not %eval(&module in &tabid_exc) %then %do ;
    data t_view /view=t_view ;
      set qadata.&&&module.table.: (keep=patid measure_date) ;
    run;
    %let qa_table = t_view ;
  %end ;
  %else %do;
    %let qa_table = qadata.&&&module.table (keep=patid measure_date) ;
  %end;
%mend;
%get_qa_table ;
proc sql noprint;
  create table dplocal.&module._pat_ym as
  select patid   
       , put(measure_date,yymmd.) as YearMonth
       , count(*) as n
  from &qa_table
  group by patid, yearmonth
  ;
quit;
%remove_labels(dplocal, &module._pat_ym);

/*level 3 <number of encounters per member by year-month (mean, median, min, max)*/
%l2_procmeans_sum (libin=dplocal,
                   dsin=&module._pat_ym,
                   libout=msoc,
                   dsout=&module._l3_pt_ym_stats,
                   keepvars=,
                   vars=n,
                   classvars=yearmonth,
                   names= n=n_patid sum=records mean=mean std=std min=min p1=p1 p5=p5 p25=p25 
                          median=median p75=p75 p95=p95 p99=p99 max=max,
                   numobs=max);

proc datasets library=msoc nolist nodetails nowarn;
  modify &module._l3_pt_ym_stats;
  format n_patid records comma15. mean std 10.2 median 10.1;
  informat mean std 10.2 median 10.1;
  run;
quit;

proc datasets lib=dplocal nowarn nolist nodetails;
  delete &module._pat_ym;
quit;

*-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-;
*  END scdm_data_qa_review-vitalsigns.sas                                               ;
*-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-;