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 (February 2005, week 3)Back to main SAS-L pageJoin or leave SAS-L (or change settings)ReplyPost a new messageSearchProportional fontNon-proportional font
Date:   Mon, 21 Feb 2005 17:24:28 -0500
Reply-To:   Ed Heaton <EdHeaton@WESTAT.COM>
Sender:   "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From:   Ed Heaton <EdHeaton@WESTAT.COM>
Subject:   Re: Data step - do loop, if-then-else, output
Comments:   To: sallys999@HOTMAIL.COM
Content-Type:   text/plain; charset="us-ascii"

Sally,

Where are you assigning values to SCORE? I don't see it anywhere.

Here is some slightly modified code that does what your code does.

Ed

Edward Heaton, SAS Senior Systems Analyst, Westat (An Employee-Owned Research Corporation), 1600 Research Boulevard, RW-3541, Rockville, MD 20850-3195 Voice: (301) 610-4818 Fax: (301) 610-5128 mailto:EdHeaton@Westat.com http://www.Westat.com

/*********************************************************************/ Data temp1 ; InFile cards ; Input id rd30d_yn rd1yr_yn wsj nyt bg wp lat ; Label wsj = "wall st j" nyt = "ny times" bg = "boston globe" wp = "washington post" lat = "la times" rd30d_yn = "read last 30 dats y/n" rd1yr_yn = "read last 1 year y/n" ; Cards4 ; 10 1 1 1 . . . 1 11 1 2 . 1 1 . . 12 2 1 1 . . . . 13 2 2 . . . . . ;;;;

Data temp2 ; Set temp1 ; Label group = "readership group" var_no = "variable number" score = "y/n score" ; /* Assign subjects to readership group. This seems to give you what you want. */ Select ; When ( ( rd30d_yn eq 1 ) and ( rd1yr_yn eq 1 ) ) group = 1 ; When ( ( rd30d_yn eq 1 ) and ( rd1yr_yn eq 2 ) ) group = 2 ; When ( ( rd30d_yn eq 2 ) and ( rd1yr_yn eq 1 ) ) group = 3 ; When ( ( rd30d_yn eq 2 ) and ( rd1yr_yn eq 2 ) ) group = 4 ; Otherwise put ( rd30d_yn rd1yr_yn group )(=) ; End ; /* Identifier variables by number. */ If ( rd30d_yn eq 1 ) then do var_no=1 to 6 ; Output ; End ; If ( rd1yr_yn eq 1 ) then do var_no=7 to 12 ; Output ; End ; Select ; When ( ( rd30d_yn eq 1 ) and ( rd1yr_yn eq 2 ) ) do ; var_no = 1 ; Output ; var_no = 7 ; Output ; End ; When ( ( rd30d_yn eq 2 ) and ( rd1yr_yn eq 1 ) ) do ; var_no = 1 ; Output ; var_no = 7 ; Output ; End ; When ( ( rd30d_yn eq 2 ) and ( rd1yr_yn eq 2 ) ) do ; var_no = 1 ; Output ; var_no = 7 ; Output ; End ; Otherwise put ( rd30d_yn rd1yr_yn var_no )(=) ; End ; Run ; Proc print ; Run ; /*********************************************************************/

-----Original Message----- From: SAS(r) Discussion [mailto:SAS-L@LISTSERV.UGA.EDU] On Behalf Of sallys999@HOTMAIL.COM Sent: Monday, February 21, 2005 3:38 PM To: SAS-L@LISTSERV.UGA.EDU Subject: Data step - do loop, if-then-else, output

Hello:

I've been asked to do a newspaper readership survey and I would welcome some help with the coding. I've put an example below of the data, my code, the desired output, and my output :(

wsj = wall st j nyt = ny times bg = boston globe wp = washington post lat = la times

1 = yes 2 = no

rd30d_yn = read last 30 dats y/n rd1yr_yn = read last 1 year y/n

id = reader id

Any help would be appreciated, especially simplifying the code. Hopefully it's something simple that I'm missing.

Thanks,

Sally

data temp1 ; infile cards ; input id rd30d_yn rd1yr_yn wsj nyt bg wp lat ; * 1=Yes, 2=No ; cards ; 10 1 1 1 . . . 1 11 1 2 . 1 1 . . 12 2 1 1 . . . . 13 2 2 . . . . . ; run ;

data temp2 ; set temp1 ; group = (.) ; * readership group ; var_no = (.) ; * variable number ; score = (.) ; * y/n score ; *-------------------------------------* | Assign subjects to readership group | *-------------------------------------; if (rd30d_yn=1 and rd1yr_yn=1) then do ; group=1 ; end ; else if (rd30d_yn=1 and rd1yr_yn=2) then do ; group=2 ; end ; else if (rd30d_yn=2 and rd1yr_yn=1) then do ; group=3 ; end ; else if (rd30d_yn=2 and rd1yr_yn=2) then do ; group=4 ; end ; *--------------------------------------* | Identifier variables by number | *--------------------------------------; if rd30d_yn=1 then do ; var_no=1 ; output ; do var_no = 2 to 6 ; output ; end ; end ; if rd1yr_yn=1 then do ; var_no=7 ; output ; do var_no=8 to 12 ; output ; end ; end; if rd30d_yn=1 and rd1yr_yn=2 then do ; var_no=1 ; output ; var_no=7 ; output ; end ; if rd30d_yn=2 and rd1yr_yn=1 then do ; var_no=1 ; output ; var_no=7 ; output ; end ; if rd30d_yn=2 and rd1yr_yn=2 then do ; var_no=1 ; output ; var_no=7 ; output ; end ; run ;

Input:

id rd30d_yn rd1yr_yn wsj nyt bg wp lat 10 1 1 1 . . . 1 11 1 2 . 1 1 . . 12 2 1 1 . . . . 13 2 2 . . . . .

Output (Required):

id rd30d_yn rd1yr_yn wsj nyt bg wp lat group var_no score 10 1 1 1 . . . 1 1 1 1 10 1 1 1 . . . 1 1 2 1 10 1 1 1 . . . 1 1 3 . 10 1 1 1 . . . 1 1 4 . 10 1 1 1 . . . 1 1 5 . 10 1 1 1 . . . 1 1 6 1 10 1 1 1 . . . 1 1 7 1 10 1 1 1 . . . 1 1 8 1 10 1 1 1 . . . 1 1 9 . 10 1 1 1 . . . 1 1 10 . 10 1 1 1 . . . 1 1 11 . 10 1 1 1 . . . 1 1 12 1 11 1 2 . 1 1 . . 2 1 1 11 1 2 . 1 1 . . 2 2 . 11 1 2 . 1 1 . . 2 3 1 11 1 2 . 1 1 . . 2 4 1 11 1 2 . 1 1 . . 2 5 . 11 1 2 . 1 1 . . 2 6 . 11 1 2 . 1 1 . . 2 7 2 12 2 1 1 . . . . 3 1 2 12 2 1 1 . . . . 3 7 1 12 2 1 1 . . . . 3 8 1 12 2 1 1 . . . . 3 9 . 12 2 1 1 . . . . 3 10 . 12 2 1 1 . . . . 3 11 . 12 2 1 1 . . . . 3 12 . 13 2 2 . . . . . 4 1 2 13 2 2 . . . . . 4 7 2

Output (as programed):

id rd30d_yn rd1yr_yn wsj nyt bg wp lat group var_no score 10 1 1 1 . . . 1 1 1 . 10 1 1 1 . . . 1 1 2 . 10 1 1 1 . . . 1 1 3 . 10 1 1 1 . . . 1 1 4 . 10 1 1 1 . . . 1 1 5 . 10 1 1 1 . . . 1 1 6 . 10 1 1 1 . . . 1 1 7 . 10 1 1 1 . . . 1 1 8 . 10 1 1 1 . . . 1 1 9 . 10 1 1 1 . . . 1 1 10 . 10 1 1 1 . . . 1 1 11 . 10 1 1 1 . . . 1 1 12 . 11 1 2 . 1 1 . . 2 1 . 11 1 2 . 1 1 . . 2 2 . 11 1 2 . 1 1 . . 2 3 . 11 1 2 . 1 1 . . 2 4 . 11 1 2 . 1 1 . . 2 5 . 11 1 2 . 1 1 . . 2 6 . 11 1 2 . 1 1 . . 2 1 . 11 1 2 . 1 1 . . 2 7 . 12 2 1 1 . . . . 3 7 . 12 2 1 1 . . . . 3 8 . 12 2 1 1 . . . . 3 9 . 12 2 1 1 . . . . 3 10 . 12 2 1 1 . . . . 3 11 . 12 2 1 1 . . . . 3 12 . 12 2 1 1 . . . . 3 1 . 12 2 1 1 . . . . 3 7 . 13 2 2 . . . . . 4 1 . 13 2 2 . . . . . 4 7 .


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