Beste svaret
Hei,
La meg prøve å svare på dette spørsmålet etter min forståelse . DATA-trinnet gir deg to funksjoner, LAG og DIF, for tilgang til tidligere verdier for en variabel eller et uttrykk. Disse funksjonene er nyttige for beregning av forsinkelser og forskjeller i serier.
Når de brukes på en enkel måte, fungerer LAG og DIF som funksjoner for forsinkelse og forskjell. Det er imidlertid viktig å huske at, til tross for navnene, er LAG- og DIF-funksjonene som er tilgjengelige i DATA-trinnet ikke sanne forsinkelses- og forskjellsfunksjoner.
Snarere er LAG og DIF køfunksjoner som husker og returnere argumentverdier fra tidligere samtaler. LAG-funksjonen husker verdien du overfører til den og returnerer som resultat verdien du sendte til den ved forrige samtale. DIF-funksjonen fungerer på samme måte, men returnerer forskjellen mellom det nåværende argumentet og den huskede verdien. (LAG og DIF returnerer en manglende verdi første gang funksjonen kalles.)
En ekte forsinkelsesfunksjon returnerer ikke verdien av argumentet for «forrige samtale», i likhet med DATA-trinnet LAG og DIF-funksjoner. I stedet returnerer en ekte forsinkelsesfunksjon verdien av argumentet for «forrige observasjon», uavhengig av sekvensen av tidligere anrop til funksjonen. Dermed, for at en ekte forsinkelsesfunksjon skal være mulig, må det være klart hva den «forrige observasjonen» er.
Hvis dataene sorteres kronologisk, fungerer LAG og DIF som ekte forsinkelses- og forskjellsfunksjoner. Hvis du er i tvil, bruk PROC SORT til å sortere dataene dine før du bruker LAG- og DIF-funksjonene. Vokt deg for manglende observasjoner, noe som kan føre til at LAG og DIF returnerer verdier som ikke er de faktiske forsinkelses- og differanseverdiene
DATA-trinnet er et kraftig verktøy som kan lese hvilket som helst antall observasjoner fra et hvilket som helst antall inndatafiler eller datasett, kan lage et hvilket som helst antall utdatasett, og kan skrive et hvilket som helst antall utdataobservasjoner til et hvilket som helst av utdatasettene, alt i samme program. Dermed er det generelt ikke klart hva «tidligere observasjon» betyr i et DATA-trinnprogram. I et DATA-trinnsprogram eksisterer «forrige observasjon» bare hvis du skriver programmet på en enkel måte som gjør dette konseptet meningsfylt.
Siden den generelle observasjonen generelt ikke er klart definert, er den ikke mulig å lage ekte forsinkelses- eller forskjellsfunksjoner for DATA-trinnet. I stedet gir DATA-trinnet køfunksjoner som gjør det enkelt å beregne etterslep og forskjeller.
Jeg håper dette svaret hjelper