articolul meu despre diferența dintre variabilele de clasă și de variabile în SAS axat pe procedurile analitice SAS. Cu toate acestea, instrucțiunea BY este utilă și în etapa de date SAS, unde este utilizată pentru a îmbina seturi de date și pentru a analiza datele la nivel de grup. Când utilizați instrucțiunea BY în pasul date, pasul date creează două variabile indicatoare temporare pentru fiecare variabilă din Instrucțiunea BY. Numele acestor variabile sunt primele.variabilă și ultima.variabilă, unde variabila este numele unei variabile în instrucțiunea BY. De exemplu, dacă utilizați declarația după Sex, atunci numele variabilelor indicatoare sunt mai întâi.Sex și ultimul.Sex.
acest articol oferă câteva exemple de utilizare a primului.variabilă și ultima.variabila indicatorvariables pentru analiza de grup în etapa de date SAS.Primul exemplu arată cum se calculează numărul și sumele cumulate pentru fiecare grup. Al doilea exemplu arată modul de calculare a timpului dintre prima și ultima vizită a unui pacient la o clinică, precum și modificarea unei cantități măsurate între prima și ultima vizită.prelucrarea pe grupe în etapa de date este o operație fundamentală care aparține fiecărei cutii de instrumente a programatorului SAS.
a se utiliza mai întâi. și ultimul. variabile pentru a găsi numărați dimensiunea grupurilor
primul exemplu utilizează date din Sashelp.Set de date cardiace, care conține date pentru 5.209 de pacienți într-un studiu medical al bolilor de inimă. Datele sunt distribuite cu SAS. Următorul pas de date extrage variabilele Smoking_Status și greutate și sortează datele de variabila Smoking_Status:
proc sortare date=Sashelp.Inima (păstrați=Smoking_Status greutate) out = inima; de Smoking_Status; alerga;
deoarece datele sunt sortate după variabila Smoking_Status, puteți utiliza prima.Smoking_Status și ultimul.Smoking_status variabile temporare pentru a număra numărul de observații în fiecare nivel al variabilei Smoking_Status. (PROC FREQ calculează aceleași informații, dar nu necesită date sortate.) Când utilizați instrucțiunea de Smoking_Status, pasul de date creează automat primul.Smoking_Status și ultimul.Variabile indicatoare Smoking_Status. După cum sugerează și numele, primul.Variabila Smoking_Status are valoarea 1 pentru prima observație din fiecare grup și valoarea 0 altfel.(Mai corect, valoarea este 1 pentru prima înregistrare și pentru înregistrările pentru care variabila Smoking_Status este diferită decât a fost pentru înregistrarea anterioară.) În mod similar, ultimul.Variabila indicatoare Smoking_Status are valoarea 1 Pentru ultima observație din fiecare grup și 0 altfel.
următorul pas de date definește o variabilă numită Count și inițializează Count=0 la începutul fiecărui grup de. Pentru fiecare observație din grupul BY, variabila Count este incrementată cu 1. Când ultima înregistrare din fiecare grup este citită, acea înregistrare este scrisă în setul de date Count.
Numărul de date; set inima; / * datele sunt sortate după Smoking_Status * / de Smoking_Status; / * creează automat var indicator * / dacă primul.Smoking_Status apoi Count = 0; / * inițializa conta la începutul fiecărui grup de */ Count + 1; /* Numărul de incrementare pentru fiecare înregistrare */ dacă ultima.Smoking_Status; / * ieșire numai ultima înregistrare a fiecărui grup de * / run; proc date de imprimare=Count noobs; format count comma10.; var Smoking_Status Count; alerga;
aceeași tehnică vă permite să acumulați valori ale unei variabile într-un grup. De exemplu, puteți acumula greutatea totală a tuturor pacienților din fiecare grup de fumat utilizând următoarele afirmații:
dacă mai întâi.Smoking_Status apoi cumWt = 0 ; cumWt + greutate;
aceeași tehnică poate fi utilizată pentru a acumula venituri din diverse surse, cum ar fi departamente, magazine sau regiuni.
a se utiliza mai întâi. și ultimul. variabile pentru a calcula durata tratamentului
o altă utilizare comună a primului.variabilă și ultima.variabilele indicatoare variabile sunt de a determina durata de timp dintre prima vizită a pacientului și ultima sa vizită. Luați în considerare următorul pas de date, care definește datele și greutățile pentru patru pacienți de sex masculin care au vizitat o clinică ca parte a unui program de pierdere în greutate:
date pacienți;informati data data7.; format data datei7. Pacientid Z4.;intrare Pacientid Data greutate @@;datalines;1021 04Jan16 302 1042 06Jan16 2851053 07Jan16 325 1063 11Jan16 2911053 01Feb16 299 1021 01Feb16 2881063 09Feb16 283 1042 16Feb16 2791021 07mar16 280 1063 09mar16 2721042 28mar16 272 1021 04apr16 2731063 20apr16 270 1053 28apr16 2891053 13mai16 295 1063 31mai16 269;
pentru aceste date, puteți sorta după ID-ul pacientului și după data vizitei. După sortare, prima înregistrare pentru fiecare pacient conține prima vizită la clinică, iar ultima înregistrare Conține ultima vizită. Puteți scădea greutatea pacientului pentru aceste date pentru a determina cât de mult a câștigat sau a pierdut pacientul în timpul procesului. De asemenea, puteți utiliza funcția INTCK pentru a calcula timpul scurs între vizite. Dacă doriți să măsurați timpul în zile, puteți scădea pur și simplu datele, dar funcția INTCK vă permite să calculați durata în termeni de ani, luni, săptămâni și alte unități de timp.
proc sortare date = pacienți;de data PatientID; alerga; date weightLoss; set pacienți; de PatientID; Reține startDate startWeight; / * păstrează valorile de pornire */ dacă primul.Pacientid apoi face; startDate = Data; startWeight = greutate; / * amintiți-vă valorile inițiale * / end; dacă ultima.PatientID apoi face; endDate = Data; endWeight = greutate; elapsedDays = intck('day', startDate, endDate); /* timp scurs (în zile) */ weightLoss = startWeight - endWeight; /* pierdere în greutate */ AvgWeightLoss = weightLoss / elapsedDays; /* pierdere medie în greutate pe zi */ output; /* ieșire numai ultima înregistrare din fiecare grup */ end;run; proc print noobs; var PatientID elapsedDays startWeight endWeight weightloss avgweightloss;alerga;
setul de date de ieșire rezumă activitățile fiecărui pacient la clinică, inclusiv pierderea medie în greutate și durata tratamentului său.
unii programatori cred că primul.variabilă și ultima.variabilele indicatoare variabile necesită ca datele să fie sortate, dar acest lucru nu este adevărat. Variabilele temporare sunt create ori de câte ori utilizați o instrucțiune BY într-un pas de date. Puteți utiliza opțiunea NOTSORTED din Instrucțiunea BY pentru a procesa înregistrări indiferent de ordinea de sortare.
rezumat
în rezumat, instrucțiunea BY din pasul date creează automat două variabile indicatoare. Puteți utiliza variabilele pentru a determina prima și ultima înregistrare din fiecare grup. De obicei primul.indicator variabil este utilizat pentru a inițializa statistici sumare și să-și amintească valorile inițiale de măsurare.Ultimul.indicatorul variabil este utilizat pentru a afișa rezultatul calculelor, care include adesea statistici descriptive simple, cum ar fi o sumă, diferență, valori maxime, minime sau medii.
prelucrarea pe grupuri în etapa de date este un subiect comun care este prezentat la conferințele SAS. Unii autori folosesc FIRST.BY și LAST.BY ca numele variabilelor indicatoare. Pentru lecturi suplimentare, recomand lucrarea” puterea Declarației BY ” (Choate și Dunn, 2007). SAS oferă, de asemenea, mai multe eșantioane despre procesarea de grup în etapa de date SAS, inclusiv următoarele:
- Carry valori non-lipsă în jos un grup de
- utilizarea de către grupuri pentru a transpune date de la lung la lat
- selectați un număr specificat de observații din partea de sus a fiecărui grup de