끄적이는 프로그래밍/SAS 프로그래밍

Mock-up shells(TFLs) 와 통계분석 결과 결합하기 (SAR)

요맘때10 2022. 8. 16. 10:36
반응형

컨셉

일반적으로 SAP 작성 시 Mock-up shells (Dummy table)은 손으로 작성하면 매우 많은 시간이 소요되기 때문에 대부분 SAS 프로그램을 이용하여 출력한다.

 

하지만, 기껏 Mock-up shells 를 프로그램을 이용하여 출력했는데도 통계분석 시 또다시 Label 등을 함께 코딩하여 사용하지 않아도 될 시간을 중복으로 사용하곤 한다.

 

오늘은 Mock-up shells를 프로그램을 이용하여 출력했을 때, 미리 만들어진 Mock-up shells와 통계분석 결과를 결합하여 ODS 출력 Table을 생성하는 방법에 대해 알아보자.


1. Mock-up shells

다들 본인의 매크로 프로그램을 이용하여 만들겠지만, 예제를 위해 수동으로 작성해본다.

data a;
  retain _STAT_;
  length _STAT_ GROUP1-GROUP2 $100.;

  _STAT_="^R/RTF'\b' "||"연령 (세)"; GROUP1=""; GROUP2=""; output;
  _STAT_="^R/RTF'\b' "||"^R/RTF'\li250' "||"Baseline"; GROUP1=""; GROUP2=""; output;
  _STAT_="^R/RTF'\li500' "||"N"; GROUP1="xx"; GROUP2="xx"; output;
  _STAT_="^R/RTF'\li500' "||"MEAN"; GROUP1="xx.xx"; GROUP2="xx.xx"; output;
  _STAT_="^R/RTF'\li500' "||"STD"; GROUP1="xx.xx"; GROUP2="xx.xx"; output;
  _STAT_="^R/RTF'\li500' "||"MEDIAN"; GROUP1="xx.xx"; GROUP2="xx.xx"; output;
  _STAT_="^R/RTF'\li500' "||"MIN"; GROUP1="xx.xx"; GROUP2="xx.xx"; output;
  _STAT_="^R/RTF'\li500' "||"MAX"; GROUP1="xx.xx"; GROUP2="xx.xx"; output;

data shell_Table1_1;
  set a;
  SERIAL=1;
  SERIAL2=_N_-3;
run;

- 위 코드를 실행할 시 아래와 같은 Mock-up shell 생성

- 이때 함께 생성되는 SERIAL 및 SERIAL2에 주목

2. 통계분석

- 통계분석 역시 본인의 매크로 프로그램을 이용하여 분석하겠지만, 예제를 위해 수동으로 작성해본다.

proc means data=ex n mean std median min max;
  class TRTPN;
  var AGE;
  output out=means(where=(TRTPN^=.)) N=N MEAN=MEAN STD=STD MEDIAN=MEDIAN MIN=MIN MAX=MAX;
run;

proc transpose data=means prefix=COL out=trans(drop=_LABEL_ rename=(_NAME_=_STAT_));
  id TRTPN;
  var N MEAN STD MEDIAN MIN MAX;
run;

data output;
  retain GROUP1 GROUP2 SERIAL SERIAL2;
  set trans;

  SERIAL=1;
  SERIAL2=_N_-1;

  if SERIAL2=0 then GROUP1=strip(put(COL1,8.));
  else GROUP1=strip(put(COL1,8.2));

  if SERIAL2=0 then GROUP2=strip(put(COL2,8.)); 
  else GROUP2=strip(put(COL2,8.2));

  drop _STAT_ COL1-COL2;
run;

- 역시 함께 생성되는 SERIAL 및 SERIAL2에 주목

 

3. ODS 출력 Table

data Table1_1;
  merge shell_Table1_1
             output
 ;
  by SERIAL SERIAL2;
run;

- Mock-up shell과 통계분석의 SERIAL, SEIRAL2 만 일치시킨다면 통계분석 시 Label (_STAT_열) 을 다시 코딩하지 않고 merge 과정을 통해 ODS 출력 Table을 생성 가능

- 코드를 여러번 작성하지 않기 때문에 시간 절약 및 실수 줄이기 가능

 

반응형