cikkem az OSZTÁLYVÁLTOZÓK és a változók közötti különbségről a SAS-ban a SAS analitikai eljárásokra összpontosított. A by utasítás azonban a SAS ADATLÉPÉSBEN is hasznos, ahol az adatkészletek egyesítésére és az adatok csoportszintű elemzésére szolgál. Amikor a by utasítást használja az ADATLÉPÉSBEN, az ADATLÉPÉS két ideiglenes indikátorváltozót hoz létre a BY utasítás minden változójához. Ezeknek a változóknak a neve az első.változó és utolsó.változó, ahol a változó egy változó neve A BY utasításban. Például, ha az állítást nemenként használja, akkor az indikátorváltozók neve az első.Szex és utolsó.Szex.
ez a cikk számos példát mutat be az első használatára.változó és utolsó.változó indikátorváltozók csoportonkénti elemzéshez az SAS ADATLÉPÉSBEN.Az első példa azt mutatja be, hogyan kell kiszámítani a számokat és a halmozott összegeket csoportonként. A második példa azt mutatja be, hogyan lehet kiszámítani a beteg első és utolsó látogatása közötti időt, valamint a mért mennyiség változását az első és az utolsó látogatás között.az ADATLÉPÉSBEN a csoportonkénti feldolgozás alapvető művelet, amely minden SAS programozó eszköztárához tartozik.
használja először. és utoljára. a keresendő változók a csoportok méretét számolják
az első példa a Sashelp adatait használja.Szív adatkészlet, amely 5209 beteg adatait tartalmazza egy szívbetegség orvosi vizsgálatában. Az adatokat a SAS-szel osztják szét. A következő ADATLÉPÉS kivonja a Smoking_Status és Súlyváltozókat, majd az adatokat a Smoking_Status változó szerint rendezi:
proc sort data=Sashelp.Szív (keep=Smoking_Status Súly) out = szív; által Smoking_Status; fuss;
mivel az adatok a Smoking_Status változó szerint vannak rendezve, használhatja az elsőt.Smoking_Status és az utolsó.Smoking_Status ideiglenes változók a megfigyelések számának megszámlálásához a Smoking_Status változó minden szintjén. (PROC FREQ kiszámítja ugyanazt az információt, de nem igényel rendezett adatokat.) A BY Smoking_Status utasítás használatakor az ADATLÉPÉS automatikusan létrehozza az elsőt.Smoking_Status és az utolsó.Smoking_Status indikátor változók. Ahogy a neve is mutatja, az első.Smoking_Status változó értéke 1 az első megfigyelés minden csoportban az érték 0 egyébként.(Pontosabban, az érték 1 az első rekordra, valamint azokra a rekordokra, amelyeknél a Smoking_Status változó eltér az előző rekordtól.) Hasonlóképpen, az utolsó.Smoking_Status indikátor változó értéke 1 az utolsó megfigyelés minden csoportban 0 egyébként.
a következő ADATLÉPÉS meghatározza a Count nevű változót, és csoportonként inicializálja a Count=0 értéket. A BY group minden megfigyelésére a Count változó 1-gyel növekszik. Amikor az egyes csoportok utolsó rekordját olvassa, a rekord a számlálási adatkészletbe kerül.
adatok száma; állítsa szív; / * az adatok rendezése Smoking_Status * / által Smoking_Status; / * automatikusan létrehozza mutató vars * / ha az első.Smoking_Status majd Count = 0 ;/ * inicializálja száma elején minden csoport * / Count + 1; / * növekmény száma minden rekord* / ha az utolsó.Smoking_Status; / * kimenet csak az utolsó rekord minden csoport * / run; proc print data = Gróf noobs; format Count comma10.; var Smoking_Status Count; fuss;
ugyanez a technika lehetővé teszi egy változó értékeinek felhalmozását egy csoporton belül. Például felhalmozhatja az összes beteg teljes súlyát az egyes dohányzási csoportokban a következő állítások használatával:
ha először.Smoking_Status akkor cumWt = 0; cumWt + Súly;
ugyanez a technika felhasználható különféle forrásokból, például osztályokból, üzletekből vagy régiókból származó bevételek felhalmozására.
használja először. és utoljára. változók a kezelés időtartamának kiszámításához
az első másik gyakori használata.változó és utolsó.változó indikátor a változók meghatározzák a beteg első látogatása és az utolsó látogatása közötti időtartamot. Fontolja meg a következő ADATLÉPÉST, amely meghatározza a dátumokat és súlyokat négy férfi beteg számára, akik egy súlycsökkentő program részeként ellátogattak egy klinikára:
adatok betegek;információ Dátum dátum7.; formátum Dátum dátum7. Beteg Z4.;input PatientID Dátum Súly@@; 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 13május16 295 1063 31május16 269;
ezeket az adatokat a beteg azonosítója és a látogatás dátuma szerint rendezheti. A válogatás után az egyes betegek első rekordja tartalmazza a klinika első látogatását, az utolsó rekord pedig az utolsó látogatást. Kivonhatja a beteg súlyát ezekre az időpontokra annak meghatározásához, hogy a beteg mennyit nyert vagy veszített a vizsgálat során. Az INTCK funkcióval kiszámíthatja a látogatások között eltelt időt is. Ha az időt napokban szeretné mérni, egyszerűen kivonhatja a dátumokat, de az INTCK funkció lehetővé teszi az időtartam kiszámítását években, hónapokban, hetekben és egyéb időegységekben.
proc sort data = betegek;PatientID dátum szerint; fuss; adatok súlycsökkenése; betegek beállítása; PatientID szerint; megtartja a startDate kezdősúlyát; / * megtartja a kiindulási értékeket */ ha először.PatientID majd csinálni; startDate = Dátum; startWeight = Súly; / * emlékezzen a kezdeti értékekre * / end; ha Utolsó.PatientID majd csinálni; endDate = Dátum; endWeight = Súly; elapsedDays = intck('nap', startDate, endDate); /* eltelt idő (napokban) */ weightLoss = startWeight - endWeight; /* fogyás */ AvgWeightLoss = weightLoss / elapsedDays; /* átlagos fogyás naponta */ output; /* kimenet csak az utolsó rekord minden csoportban */ end;run; proc print noobs; var PatientID elapsedDays startWeight endWeight weightLoss avgweightloss;fuss;
a kimeneti adatkészlet összefoglalja az egyes betegek klinikai tevékenységét, beleértve az átlagos fogyást és a kezelés időtartamát.
néhány programozó úgy gondolja, hogy az első.változó és utolsó.a változó indikátor változók megkövetelik az adatok rendezését, de ez nem igaz. Az ideiglenes változók akkor jönnek létre, amikor egy By utasítást használ egy ADATLÉPÉSBEN. A by utasítás NOTSORED opcióját használhatja a rekordok rendezési sorrendtől függetlenül történő feldolgozásához.
Összegzés
összefoglalva, az ADATLÉPÉSBEN a by utasítás automatikusan két indikátorváltozót hoz létre. A változók segítségével csoportonként meghatározhatja az első és az utolsó rekordot. Jellemzően az első.a változó indikátor az összefoglaló statisztikák inicializálására és a mérés kezdeti értékeinek megjegyzésére szolgál.Az utolsó.a változó indikátort a számítások eredményének kiadására használják, amely gyakran tartalmaz egyszerű leíró statisztikákat, például összeget, különbséget, maximális, minimális vagy átlagértékeket.
csoportonkénti feldolgozás az ADATLÉPCSŐBEN gyakori téma, amelyet a SAS konferenciákon mutatnak be. Egyes szerzők használják FIRST.BY és LAST.BY mint az indikátor változók neve. További olvasásra ajánlom a “The Power of the by Statement” című cikket (Choate and Dunn, 2007). A SAS több mintát is tartalmaz a csoportonkénti feldolgozásról a SAS ADATLÉPÉSBEN, beleértve a következőket:
- a nem hiányzó értékek csoportonkénti átvitele
- csoportok általi felhasználás az adatok hosszúról szélesre történő átültetésére
- válasszon meghatározott számú megfigyelést az egyes csoportok tetejéről