使用冒号和创建文件名变量的SAS set语句

使用冒号和创建文件名变量的SAS set语句,sas,dataset,Sas,Dataset,因此,使用SAS,我有许多SAS monthend数据集,命名如下: mydata_201501 mydata_201602 mydata_201603 mydata_201604 mydata_201605 ... mydata_201612 data mynewdata; set mydata_:; run; 每个人在特定的月份都有账户信息。我希望使用冒号将所有数据集堆叠到一个数据集中,而不是按如下方式写出完整的set语句: mydata_201501 mydata_201602 myd

因此,使用SAS,我有许多SAS monthend数据集,命名如下:

mydata_201501
mydata_201602
mydata_201603
mydata_201604
mydata_201605
...
mydata_201612
data mynewdata;
set mydata_:;
run;
每个人在特定的月份都有账户信息。我希望使用冒号将所有数据集堆叠到一个数据集中,而不是按如下方式写出完整的set语句:

mydata_201501
mydata_201602
mydata_201603
mydata_201604
mydata_201605
...
mydata_201612
data mynewdata;
set mydata_:;
run;
但是,数据集中没有datestamp变量,因此当我堆叠它们时,会丢失每个帐户的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;

谢谢

我总是觉得点击评论链接很烦人,希望这是你的答案。使用
INDSNAME=
SET语句选项将数据集名称分配给变量:

data mynewdata;
  set mydata_: indsname=_tablelabel_;
  tablename = _tablelabel_;
run;
注意:您可以随意调用
\u tablelabel\u
,您可能希望对其进行更改,使其看起来不像SAS生成的变量名


INDSNAME=
只是在9.2版中变成了一个SAS SET语句选项,这一点很清楚,在我的特定代码中,数据集被命名为mydata_yyyymm,我想要一个带有日期戳的monthend变量,我可以使用mjsqu提供的解决方案来生成它,如下所示(如果需要,提供obs和keep语句):


看起来这就是你想要的:这太棒了——一个完美的解决方案。非常感谢。