我使用以下代码创建了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;
答案 0 :(得分:1)
从根本上讲,您是在将实际值与显示的值(即格式)混淆。具体来说,datepart
从日期/时间字段中提取日期部分。然后,应用format
仅会更改显示的方式,而不是实际的基础价值。因此,在 DAY 以下,绝不会包含'WEDNESDAY'
或'THURSDAY'
的字符值,而是原始整数值(19724
和19725
)。
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;