Sas 提取新变量的月份和年份

Sas 提取新变量的月份和年份,sas,Sas,我有一个带有变量的数据集,该变量具有订单日期(MMDDYY10.)。我需要提取月份和年份,以便逐月查看订单——每年,因为有很多年。我模糊地意识到月和年功能,但如何将它们结合起来创建新的月bin 理想情况下,我会为每个月/年创建一个bin,这样我的输出可以如下所示: Date Item 2011OCT 2011NOV 2011DEC 2012JAN ... a 50 40 30 20 b 1

我有一个带有变量的数据集,该变量具有订单日期
(MMDDYY10.)
。我需要提取月份和年份,以便逐月查看订单——每年,因为有很多年。我模糊地意识到
功能,但如何将它们结合起来创建新的月bin

理想情况下,我会为每个月/年创建一个bin,这样我的输出可以如下所示:

                    Date
Item    2011OCT 2011NOV 2011DEC 2012JAN ...
a         50      40       30     20
b         15      20       25     30 
c         1        2        3      4
total    
proc means data=yourdata;
class datevar;
format datevar MONYY7.;
var whatever;
run;
以下是我创建的示例代码:

data dsstabl;
    set dsstabl;
    order_month = month(AC_DATE_OF_IMAGE_ORDER);
    order_year = year(AC_DATE_OF_IMAGE_ORDER);
    order = compress(order_month||order_year);
run;

proc freq data
    table item * _order;
run;

提前谢谢

进行分析时,请使用适当的格式<代码>星期一。听起来像是对的。这将正确排序并相应地对值进行分组。 比如:

                    Date
Item    2011OCT 2011NOV 2011DEC 2012JAN ...
a         50      40       30     20
b         15      20       25     30 
c         1        2        3      4
total    
proc means data=yourdata;
class datevar;
format datevar MONYY7.;
var whatever;
run;
所以你的桌子:

proc tabulate data=dsstabl;
class item datevar;
format datevar MONYY7.;
tables item,datevar*n;
run;

或者你可以用漂亮的技巧来做

data my_data_with_months;
    set my_data;
    MONTH = INTNX('month', NORMAL_DATE, 0, 'B');
run;

永远用它。

乔,你今天只是照亮了我的世界。非常感谢你。我正要编辑我的问题,以包含一个新的反馈代码——上面的更新。但你的建议似乎是更有效的方法。将其更改为字符字段的问题(或好处,有时)在于,最终的排序顺序不同。如果您不介意排序顺序按字母顺序按月排列,而不是按日期顺序排列(尽管压缩文件中的变量名称错误),那么您在顶部的方法并非不合理。另外,
CATS
函数将在一个函数中执行压缩+连接。如果我想按“项”进行分层,我是否需要进行排序?取决于您在其中执行的分析。如果您在
PROC-FREQ
中执行此操作,则必须使用
BY
语句进行排序和使用,除非您只需要一个正常的交叉表就可以了(上面的内容就可以了)。如果您在
PROC MEANS
PROC tablate
或另一个class语句过程中执行此操作,则可以使用
class
进行分层,而不进行排序。当然,如果这是您想要的,也可以制表-这取决于您对结果的追求
制表
在显示主要计数和%s方面与
FREQ
更为相似,而
表示
进行其他汇总统计(尽管两者重叠很多)。