2017-02-17 7 views
2

Таким образом, с помощью SAS, у меня есть ряд SAS monthend наборов данных, названных следующим образом:SAS установлен оператор с двоеточие и создания файла переменной

mydata_201501 
mydata_201602 
mydata_201603 
mydata_201604 
mydata_201605 
... 
mydata_201612 

Каждый имеет информацию о счете в частности monthend. Я хочу, чтобы стек наборов данных все в одном наборе данных, используя двоеточие, а не выписывать полный набор заявление следующим образом:

data mynewdata; 
set mydata_:; 
run; 

Однако нет переменной даты: в наборах данных так, когда укладываю их я потеряю информацию monthend для каждой учетной записи. Я хочу знать, какая строка относится к тому montend для каждой учетной записи. Есть ли способ, которым я могу автоматически создать переменную, которая называет таблицу, из которой исходит строка. например длинноволновой способ:

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 с DATESTAMP, я был в состоянии произвести это с использованием раствора, представленный mjsqu следующим образом (OBS и сохранить заявление при условии, если это необходимо), как:

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