2017-02-17 241 views
2

一个文件名,我有一个编号命名的SAS monthend数据集如下:SAS设置语句中使用冒号和创建因此,使用SAS变量

mydata_201501 
mydata_201602 
mydata_201603 
mydata_201604 
mydata_201605 
... 
mydata_201612 

每个人都有帐户,特别monthend信息。我想用冒号,而不是写出来的全套声明如下的数据集堆全部纳入一个数据集:

data mynewdata; 
set mydata_:; 
run; 

然而有数据集内没有邮戳的变量,所以当我堆叠起来我会失去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

它会出现,这是你在找什么:http://support.sas.com/documentation/cdl/ en/lrdict/64316/HTML/default/viewer.htm#a000173782.htm#a003181060 – mjsqu

回答

2

我总是发现点击恼人的评论链接,所以希望这里是在上下文答案。使用INDSNAME= SET语句选项的数据集名称分配给一个变量:

data mynewdata; 
    set mydata_: indsname=_tablelabel_; 
    tablename = _tablelabel_; 
run; 

注:你可以拨打_tablelabel_任何你想要的,你可能希望改变它,所以它不会看起来像一个SAS生成的变量名称

INDSNAME=只成了版本SAS SET语句选项9.2

+0

这太棒了 - 一个完美的解决方案。非常感谢。 – Tammboy

1

只是要清楚,用我特定的代码,其中的数据集被命名为mydata_yyyymm,我想用日戳一个monthend变量,我是能够生产这种使用mjsqu提供的解决方案如下(如果需要提供OB和保持语句):

data mynewdata; 
    set mydata_: (obs=100 keep=xxx xxx) indsname=_tablelabel_; 
    format monthend yymmdd10.; 
    monthend = input(scan(_tablelabel_,-1,'_'),yymmn6.); 
run;