Tak więc używając SAS, mam wiele zestawów danych SAS Monthend o nazwisku:

mydata_201501
mydata_201602
mydata_201603
mydata_201604
mydata_201605
...
mydata_201612

Każdy ma informacje o koncie w szczególności miesiąc. Chcę układać zbiory danych na jednym zestawieniu zestawu danych za pomocą COLON, zamiast pisać pełne ustawienie w następujący sposób:

data mynewdata;
set mydata_:;
run;

Jednak nie ma zmiennej danych Datestamp w zestawach danych, więc kiedy ich stosuję, stracę informacje Monthend dla każdego konta. Chcę wiedzieć, która linia odnosi się do której miesiąca na każde konto. Czy istnieje sposób, w jaki mogę automatycznie utworzyć zmienną, która nazywa tabelę, z którego pochodzi rząd. Na przykład długo wykończony sposób byłby to:

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;

Ale czy istnieje szybszy sposób za pomocą dwukropki wzdłuż tych linii?

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

Dzięki

2
Tammboy 17 luty 2017, 14:07

2 odpowiedzi

Najlepsza odpowiedź

Zawsze znajduję kliknięcie na komentarz Linki irytujące, więc mam nadzieję, że jest odpowiedzią w twoim kontekście. Użyj opcji INDSNAME= Ustaw opcję, aby przypisać nazwę danych do zmiennej:

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

N.B. Możesz zadzwonić do _tablelabel_ cokolwiek chcesz, a możesz go zmienić, więc nie jest to wygląd jak wygenerowana nazwa zmiennej SAS.

INDSNAME= Stał się opcją instrukcji SAS w wersji 9.2

2
mjsqu 17 luty 2017, 12:35

Aby być jasnym, z moim szczególnym kodem, w którym zestawy danych nazywano MyData_yyyymm i chciałem zmiennej Montenda z DatEstampem, udało mi się wyprodukować przy użyciu rozwiązania dostarczonego przez MJSQU w następujący sposób (OBS i Utrzymanie przedstawione w razie potrzeby):

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