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 (September 2010, week 4)Back to main SAS-L pageJoin or leave SAS-L (or change settings)ReplyPost a new messageSearchProportional fontNon-proportional font
Date:         Fri, 24 Sep 2010 11:47:19 -0400
Reply-To:     sas quest <sasquest@GMAIL.COM>
Sender:       "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From:         sas quest <sasquest@GMAIL.COM>
Subject:      Re: Using retain
In-Reply-To:  <AANLkTinHKkMNUztK3UGtLmb3SscAaVOChk=cYCS3CApi@mail.gmail.com>
Content-Type: text/plain; charset=ISO-8859-1

oh..yes..i was trying to on similar lines but couldn't succeed since i kept writing if first.sub then retain val_ 0; which was grossly incorrect

On Fri, Sep 24, 2010 at 11:30 AM, Joe Matise <snoopy369@gmail.com> wrote:

> I would suggest this instead: > > data want; > set have; > by sub type; > retain val_ 0; > if first.sub then do; > val_=0; > n_val=val; > end; > n_val=val_+val; > if last.type then val_=n_val; > drop val_ type_counter; > run; > > insomuch as the above works for C,D,E types, and the below only works for > A,B. type_counter is unnecessary. > > -Joe > > On Fri, Sep 24, 2010 at 10:12 AM, Arthur Tabachneck <art297@netscape.net > >wrote: > > > How about: > > > > data want; > > set have; > > by sub type; > > retain val_ 0; > > if first.sub then type_counter=1; > > if type_counter eq 1 then do; > > val_=val; > > n_val=val; > > end; > > else n_val=val_+val; > > if last.type then type_counter+1; > > drop val_ type_counter; > > run; > > > > Art > > -------- > > On Fri, 24 Sep 2010 11:07:03 -0400, sas quest <sasquest@GMAIL.COM> > wrote: > > > > >Joe, > > >your suggested change doesnt work.since i want to retain last value of > > type > > >so that i can add it up to get continuous values for each sub. > > > > > >thanks > > >On Fri, Sep 24, 2010 at 10:55 AM, Joe Matise <snoopy369@gmail.com> > wrote: > > > > > >> If you use 'if first.sub' instead of if type = 'A' then it should work > > as > > >> you want. > > >> > > >> -Joe > > >> > > >> > > >> On Fri, Sep 24, 2010 at 9:54 AM, sas quest <sasquest@gmail.com> > wrote: > > >> > > >>> hi , > > >>> my code fails as soon as sub changes to 2. > > >>> Art's code works ..but i wanted something more general without > > referring > > >>> to > > >>> type='A',since i might anticipate a variety of types. > > >>> > > >>> Thanks > > >>> > > >>> On Fri, Sep 24, 2010 at 10:47 AM, Arthur Tabachneck > > <art297@netscape.net > > >>> >wrote: > > >>> > > >>> > I think that you are trying to achieve the following: > > >>> > > > >>> > data have; > > >>> > input sub type $ val; > > >>> > cards; > > >>> > 1 A 20 > > >>> > 1 A 30 > > >>> > 1 A 36 > > >>> > 1 A 41 > > >>> > 1 B 1 > > >>> > 1 B 5 > > >>> > 1 B 11 > > >>> > 1 B 19 > > >>> > 2 A 12 > > >>> > 2 A 20 > > >>> > 2 A 29 > > >>> > 2 A 31 > > >>> > 2 B 3 > > >>> > 2 B 10 > > >>> > 2 B 11 > > >>> > ; > > >>> > run; > > >>> > > > >>> > data want; > > >>> > set have; > > >>> > retain val_ 0; > > >>> > if type eq 'A' then do; > > >>> > val_=val; > > >>> > n_val=val; > > >>> > end; > > >>> > else n_val=val_+val; > > >>> > drop val_; > > >>> > run; > > >>> > > > >>> > HTH, > > >>> > Art > > >>> > --------- > > >>> > On Fri, 24 Sep 2010 10:36:59 -0400, Sas Quest <sasquest@GMAIL.COM> > > >>> wrote: > > >>> > > > >>> > >data have; > > >>> > >input sub type$ val; > > >>> > >cards; > > >>> > >1 A 20 > > >>> > >1 A 30 > > >>> > >1 A 36 > > >>> > >1 A 41 > > >>> > >1 B 1 > > >>> > >1 B 5 > > >>> > >1 B 11 > > >>> > >1 B 19 > > >>> > >2 A 12 > > >>> > >2 A 20 > > >>> > >2 A 29 > > >>> > >2 A 31 > > >>> > >2 B 3 > > >>> > >2 B 10 > > >>> > >2 B 11 > > >>> > >run; > > >>> > > > > >>> > >Want: > > >>> > >Sub type val n_val > > >>> > >1 A 20 20 > > >>> > >1 A 30 30 > > >>> > >1 A 36 36 > > >>> > >1 A 41 41 > > >>> > >1 B 1 42 > > >>> > >1 B 5 46 > > >>> > >1 B 11 52 > > >>> > >1 B 19 60 > > >>> > >2 A 12 12 > > >>> > >2 A 20 20 > > >>> > >2 A 29 29 > > >>> > >2 A 31 31 > > >>> > >2 B 3 34 > > >>> > >2 B 10 41 > > >>> > >2 B 11 42 > > >>> > > > > >>> > >my code: > > >>> > > > > >>> > >data want; > > >>> > >set have; > > >>> > >by sub type; > > >>> > >retain val_ 0; > > >>> > >n_val=val_+val; > > >>> > >/*f=first.type; > > >>> > >l=last.type;*/ > > >>> > >if last.type then val_=val; > > >>> > >drop val_; > > >>> > >run; > > >>> > > > > >>> > > > > >>> > >What can be modified in my code to get the desired output? > > >>> > > > > >>> > >Thanks > > >>> > > > >>> > > >> > > >> > > >


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