LISTSERV at the University of Georgia
Menubar Imagemap
Home Browse Manage Request Manuals Register
Previous messageNext messagePrevious in topicNext in topicPrevious by same authorNext by same authorPrevious page (May 2009, week 1)Back to main SAS-L pageJoin or leave SAS-L (or change settings)ReplyPost a new messageSearchProportional fontNon-proportional font
Date:         Tue, 5 May 2009 12:24:15 -0700
Reply-To:     "Nordlund, Dan (DSHS/RDA)" <NordlDJ@DSHS.WA.GOV>
Sender:       "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From:         "Nordlund, Dan (DSHS/RDA)" <NordlDJ@DSHS.WA.GOV>
Subject:      Re: By group
In-Reply-To:  <200905051832.n45GIOIP000894@malibu.cc.uga.edu>
Content-Type: text/plain; charset=windows-1252

> -----Original Message----- > From: SAS(r) Discussion [mailto:SAS-L@LISTSERV.UGA.EDU] On Behalf Of > SUBSCRIBE SAS-L Dan > Sent: Tuesday, May 05, 2009 11:33 AM > To: SAS-L@LISTSERV.UGA.EDU > Subject: Re: By group > > HI. Richard: > > > Thanks for jump in to answer part of my questions. However, I am still > waiting my questions to be fully answered. I am assuming my role on this > diagnose process, how could I get the values of "LAG Stores What". Because > I could guess that the value of "LAG Returns What" to be the value of lag > (score), I still could not figure out the value of "LAG Stores What". And > it is important to know the value of "LAG Stores What" if we will be > convinced by what Howards states. > > Thanks again. > > Dan

This is the code that Howard was using the table to explain.

data prevscores; set demo; by id; If not first.id then PrevScore = lag(score); run;

When the lag() function is used in a data step, a FIFO queue of length 1 is created and initialized with a value of missing at compile time. When the lag(score) function is executed, "LAG Returns What" is the value currently in the queue (this will be missing the very first time) and then the current value of score ("LAG Stores What") is pushed onto the queue. The next time lag(score) is executed, the value returned will be the current value in the queue (i.e. whatever was pushed onto the queue the last time lag(score) was executed). Then the current value of score is pushed onto the queue, overwriting what was there previously.

So, in line two of the table, lag() is executed and first returns the value currently in the queue ("LAG Returns What"), which is the missing value from the initialization process, and then the current value ("LAG Stores What") of score (=31) is pushed on to the queue. For obs 3, lag(score) returns the 31 that was previously stored there and then stores the current value of score (=29). Lag(score) always returns whatever is currently stored in the queue, and then stores the current value in the queue.

Here is a link to a previous post where I present a simulation of how lag() works. It may be useful in understanding what lag actually is doing.

http://listserv.uga.edu/cgi-bin/wa?A2=ind0905a&L=sas-l&D=0&P=13725

Hope this is helpful,

Dan

Daniel J. Nordlund Washington State Department of Social and Health Services Planning, Performance, and Accountability Research and Data Analysis Division Olympia, WA 98504-5204


Back to: Top of message | Previous page | Main SAS-L page