Sas Proc制表:对格式化变量重新排序

Sas Proc制表:对格式化变量重新排序,sas,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 4

我使用以下代码创建了一个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选项卡分析一些数据,其中day是类变量之一,并在输出中按时间顺序显示星期几;但是,输出表从星期二开始。我想从星期天开始。我已经阅读了下一页并尝试了proc格式的无效代码,但它生成了一个表,其中“星期几”=“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;

基本上,您将实际值与显示值(即格式)混淆。具体来说,
datepart
从日期/时间字段中提取日期部分。然后,应用
格式
只会更改其显示方式,而不会更改实际的基础值。因此,以下日期从不包含字符值
“星期三”或
“星期四”
,而是原始整数值(
19724
19725

考虑实际使用函数将列指定为工作日值。然后将用户定义的格式应用于
proc tablate

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;

@Parfait,谢谢你的帮助-见上文。
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;