/ / Zmienna daty przyrostu - data, sas, inkrement

Przyrostowa zmienna daty - data, sas, inkrement

Mam zestaw danych SAS, w którym muszę dodać datęzmienna, zaczynając od określonej daty (np. 10 lipca 2014 r.). Dla każdej obserwacji data musi wzrosnąć o jeden dzień. Nie mogę wymyślić, jak zwiększyć datę. Ilekroć próbuję, otrzymuję tę samą datę dla wszystkich obserwacji.

Odpowiedzi:

2 dla odpowiedzi № 1

Witamy w Stack Overflow! Załóżmy, że twój zestaw danych wygląda tak:

Mieć

Obs Var1
1   Mazda
2   Ford
3   BMW

Chcieć

Obs Date        Var1
1   01JAN2015   Mazda
2   02JAN2015   Ford
3   03JAN2015   BMW

Możesz użyć a Suma zestawienia z a Data SAS dosłowny do osiągnięcia tego celu.

data want;
format Date date9. /* Makes date the first var, looks prettier */
set have;
if(_N_ = 1) then Date = "31DEC2014"d; /* Set initial value */
Date+1; /* Increment SAS date value by 1 day for each day */
run;

Jeśli nie użyłeś automatycznej zmiennej N przedtem jest to licznik iteracji za każdym razem, gdy SAS przechodzi od góry do dołu.

Prawdopodobnym powodem, dla którego widzisz tę samą datę każdego dnia, jest to, że nie zachowujesz wartości, którą chcesz zwiększyć. Rozważmy poniższy przykładowy program:

data WontWork;
set have;

Add_Me = 1;

/* Do loop just simulates dataset iterations */
do i = 1 to 10;
Add_Me = Add_Me + 1;
output;
end;

drop i;
run;

Wyjaśnienie

Ilekroć SAS przechodzi przez jedną iteracjękrok danych, wektor danych programu (PDV) resetuje wszystkie nieautomatyczne zmienne do brakujących. Aby to naprawić, musisz albo użyć instrukcji Zachowaj, a następnie zwiększyć wartość zmiennej, albo użyć Sumy, aby wykonać zadanie zarówno zachowywania, jak i sumowania zmiennej. Stwierdzenia Retain / Sum informują SAS, aby zapamiętał ostatnią wartość zmiennej, tak aby nie została zresetowana do utraty podczas iteracji przez krok danych. Jedną unikalną własnością instrukcji keep jest to, że możesz ustawić wartość początkową. Domyślnie instrukcja keep powoduje zainicjowanie zmiennej jako brakującą. Instrukcja sumująca zawsze inicjuje zmienną jako brakującą.

data works;
retain Add_Me 0;

/* Do loop just simulates dataset iterations */
do i = 1 to 10;
Add_Me = sum(Add_Me, 1);
output;
end;

drop i;
run;

LUB

data works2;

/* Do loop just simulates dataset iterations */
do i = 1 to 10;
Add_Me+1;
output;
end;

drop i;
run;

Zauważ, że instrukcja suma wykonuje oba te kroki, a także obsługuje brakujące wartości. Pomyśl o tym jako o skrócie.

Mam nadzieję, że to rozwiązało Twój problem i ponownie witamy w Stack Overflow!