Proc制表:重新格式化格式化的变量

时间:2019-12-02 16:30:05

标签: sas

我使用以下代码创建了day变量:

DAY=datepart(checkin_date_time); /*example of checkin_date_time 1/1/2014 4:44:00*/
format DAY DOWNAME.;

样本数据:

   ID   checkin_date_time      Admit_Type     BED_ORDERED_TO_DISPO
   1      1/1/2014 4:40:00        ICU               456
   2      1/1/2014 5:64:00        Psych             146
   3      1/1/2014 14:48:00       Acute             57
   4      1/1/2014 20:34:00        ICU              952
   5      1/2/2014 10:00:00        Psych            234
   6      1/2/2014 3:48:00        Psych             846
   7      1/2/2014 10:14:00       ICU               90
   8      1/2/2014 22:27:00        ICU              148

我想使用Proc Tab分析一些数据,其中day是类变量之一,并且星期几按时间顺序显示在输出中;但是,输出表从星期二开始。我希望从星期日开始。我已经阅读了以下页面http://support.sas.com/resources/papers/proceedings11/085-2011.pdf,并尝试了proc格式的invalue代码,但它生成的表中的“星期几” =“ 21”。不太确定从这里去哪里。

谢谢!

 proc format;
 invalue day_name
 'Sunday'=1
 'Monday'=2
 'Tuesday'=3
 'Wednesday'=4
 'Thursday'=5
 'Friday'=6
 'Saturday'=7;
 value day_names
 1='Sunday'
 2='Monday'
 3='Tuesday'
 4='Wednesday'
 5='Thursday'
 6='Friday'
 7='Saturday';
 run; 

 data Combined_day;
 set Combined; 
 day_of_week = input(day,day_name.);
 run; 

 proc tabulate data = Combined_day;
 class  Day Admit_Type;
 var BED_ORDERED_TO_DISPO ;
 format day_of_week day_names.;
 table Day*Admit_Type, BED_ORDERED_TO_DISPO * (N Median); 
 run;

enter image description here

1 个答案:

答案 0 :(得分:1)

从根本上讲,您是在将实际值与显示的值(即格式)混淆。具体来说,datepart从日期/时间字段中提取日期部分。然后,应用format仅会更改显示的方式,而不是实际的基础价值。因此,在 DAY 以下,绝不会包含'WEDNESDAY''THURSDAY'的字符值,而是原始整数值(1972419725)。

DAY = datepart(checkin_date_time);   // DATE VALUE
format DAY DOWNAME.;                 // FORMATTED DATE VALUE (SAME UNDERLYING DATE VALUE) 

考虑实际上使用WEEKDAY函数将一列分配为工作日值。然后将您的用户定义格式应用于proc tabulate

data Combined_day;
    set Combined;

    checkin_date = datepart(checkin_date_time);  // NEW DATE VALUE (NO TIME)
    format checkin_date date9.;

    checkin_weekday = weekday(checkin_date);     // NEW INTEGER VALUE OF WEEKDAY
run;


proc tabulate data = Combined_day;
    class checkin_weekday Admit_Type;
    var BED_ORDERED_TO_DISPO ;
    format checkin_weekday day_names.;           // APPLY USER DEFINED FORMAT

    table checkin_weekday*Admit_Type, BED_ORDERED_TO_DISPO * (N Median); 
run;

Table Output

相关问题