LISTSERV at the University of Georgia
Menubar Imagemap
Home Browse Manage Request Manuals Register
Previous (more recent) messageNext (less recent) messagePrevious (more recent) in topicNext (less recent) in topicPrevious (more recent) by same authorNext (less recent) by same authorPrevious page (November 2011, week 1)Back to main SAS-L pageJoin or leave SAS-L (or change settings)ReplyPost a new messageSearchProportional fontNon-proportional font
Date:         Mon, 7 Nov 2011 14:14:35 -0800
Reply-To:     "Schwarz, Barry A" <barry.a.schwarz@BOEING.COM>
Sender:       "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From:         "Schwarz, Barry A" <barry.a.schwarz@BOEING.COM>
Subject:      Re: Data step question: why different results
In-Reply-To:  <FA0550A1D186FF49BB0748CD711B17EDD91034B71E@SDPSMSX.QUALNET.ORG>
Content-Type: text/plain; charset="us-ascii"

If the data step contains a set statement, it will always iterate after reaching the last statement.

In scenario 1, the sequence is read observation 1 from have1 (x and y get set) output observation 1 to want (z missing as expected) assign new value to x and z output observation 2 to want (y unchanged as expected) iterate data step attempt to read observation 2 from have1 (no such observation) terminate data step

In scenario 2, the sequence is assign values to x and z output observation 1 to want (y missing as expected) read observation 1 from have1 (x and y get set) output observation 2 to want (new values for x and y as expected) iterate assign values to x and z (note that z is reset, not retained) output observation 3 to want (y is retained) attempt to read observation 2 from have1 (no such observation) terminate data step

Since you presented a "solution" without describing the requirement, you are not likely to get any suggestions regarding a general solution.

> -----Original Message----- > From: SAS(r) Discussion [mailto:SAS-L@LISTSERV.UGA.EDU] On Behalf Of Bian, > Haikuo > Sent: Monday, November 07, 2011 12:25 PM > To: SAS-L@LISTSERV.UGA.EDU > Subject: Data step question: why different results > > Dear list, > > Question emerged when I tried to insert rows into SAS table using > datastep. > > /*original table*/ > data have1; > x=1; > y=2; > run; > > /*Scenario 1*/ > data want; > set have1; > output; > x=23; > z=34; > output; > run; > > proc print;run; > and I got the following: > > > Obs x y z > > 1 1 2 . > 2 23 2 34 > > This is understandable to me. > > Then I switched the order like this: > > /*Scenario 2*/ > data want; > x=23; > z=34; > output; > set have1; > output; > run; > > proc print;run; > > Then I got: > > Obs x z y > > 1 23 34 . > 2 1 34 2 > 3 23 34 2 > > > Question 1: Why the third record? Is it because Datastep will loop again > after reaching the end? See next scenario. > 2. Why value of variable z is automatically retained even > z is not from a dataset? > > > I can get what I expected by doing: > /*Scenario 3*/ > > data want; > if _n_=1 then do; > x=23; > z=34; > output; > end; > set have1; > output; > run; > > proc print;run; > > then I can get: > > Obs x z y > > 1 23 34 . > 2 1 34 2 > > > > Thank you all in advance! > > Haikuo > > ----------------------------------------- > Email messages cannot be guaranteed to be secure or error-free as > transmitted information can be intercepted, corrupted, lost, > destroyed, arrive late or incomplete, or contain viruses. The > Centers for Medicare & Medicaid Services therefore does not accept > liability for any error or omissions in the contents of this > message, which arise as a result of email transmission. > > CONFIDENTIALITY NOTICE: This communication, including any > attachments, may contain confidential information and is intended > only for the individual or entity to which it is addressed. Any > review, dissemination, or copying of this communication by anyone > other than the intended recipient is strictly prohibited. If you > are not the intended recipient, please contact the sender by reply > email and delete and destroy all copies of the original message.


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