因此,使用SAS,我有许多SAS monthend数据集,命名如下:
mydata_201501
mydata_201602
mydata_201603
mydata_201604
mydata_201605
...
mydata_201612
每个人都有特定星期的帐户信息。我想使用冒号将数据集全部堆叠到一个数据集中,而不是按如下方式写出完整的set语句:
data mynewdata;
set mydata_:;
run;
但是数据集中没有datestamp变量,因此当我堆叠它们时,我将丢失每个帐户的monthend信息。我想知道哪一行指的是每个帐户的哪个monthend。有没有办法可以自动创建一个变量来命名行所来自的表。例如,漫长的方式就是这样:
data mynewdata;
set mydata_201501 (in=a) mydata_201502 (in=b) mydata_201503 (in=c)...;
if a then tablename = 'mydata_201501';
if b then tablename = 'mydata_201502';
if c...
run;
但是有更快的方法在这些线上使用冒号吗?
data mynewdata;
set mydata_:;
tablename = _tablelabel_;
run;
感谢
答案 0 :(得分:2)
我总是发现点击评论链接很烦人,所以希望在您的上下文中找到答案。使用INDSNAME=
SET语句选项将数据集名称分配给变量:
data mynewdata;
set mydata_: indsname=_tablelabel_;
tablename = _tablelabel_;
run;
N.B。您可以随意调用_tablelabel_
,并且您可能希望更改它,以便它不像
INDSNAME=
仅成为9.2版中的SAS SET语句选项
答案 1 :(得分:1)
为了清楚,使用我的特定代码,数据集名为mydata_yyyymm,我想要一个带有日期戳的monthend变量,我能够使用mjsqu提供的解决方案生成这个,如下所示(如果需要,提供obs和keep语句) ):
data mynewdata;
set mydata_: (obs=100 keep=xxx xxx) indsname=_tablelabel_;
format monthend yymmdd10.;
monthend = input(scan(_tablelabel_,-1,'_'),yymmn6.);
run;