SAS使用冒号设置语句并创建文件名变量

时间:2017-02-17 11:07:03

标签: sas dataset

因此,使用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;

感谢

2 个答案:

答案 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;