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 (March 2000, week 2)Back to main SAS-L pageJoin or leave SAS-L (or change settings)ReplyPost a new messageSearchProportional fontNon-proportional font
Date:   Mon, 13 Mar 2000 13:47:53 -0800
Reply-To:   Ya Huang <ya.huang@AGOURON.COM>
Sender:   "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From:   Ya Huang <ya.huang@AGOURON.COM>
Subject:   Re: Data step problem
Comments:   To: "Robert Andrew Bowell Jr." <bowell@NBCS.RUTGERS.EDU>
Content-Type:   text/plain; charset=us-ascii

If you don't mind to try proc sql, here is a solution:

** testing data; data test; do id=1 to 6; do j=1 to 10; corclass=int(uniform(id*j)*4)+1; output; end; end;

proc sql; create table test as select *, sum(corclass=1)/(sum(corclass=1)+sum(corclass=2)) as hitrate, sum(corclass=3)/(sum(corclass=3)+sum(corclass=4)) as flsrate from test group by id ;

proc print; run;

============================= OBS ID CORCLASS HITRATE FLSRATE

1 1 1 0.60 0.40000 2 1 3 0.60 0.40000 3 1 2 0.60 0.40000 4 1 3 0.60 0.40000 5 1 4 0.60 0.40000 6 1 4 0.60 0.40000 7 1 4 0.60 0.40000 8 1 2 0.60 0.40000 9 1 1 0.60 0.40000 10 1 1 0.60 0.40000 11 2 2 0.50 0.33333 12 2 3 0.50 0.33333 13 2 1 0.50 0.33333 14 2 4 0.50 0.33333 15 2 4 0.50 0.33333 16 2 4 0.50 0.33333 17 2 4 0.50 0.33333 18 2 3 0.50 0.33333 19 2 1 0.50 0.33333 20 2 2 0.50 0.33333 21 3 3 0.00 0.83333 22 3 2 0.00 0.83333 23 3 4 0.00 0.83333 24 3 3 0.00 0.83333 25 3 2 0.00 0.83333 26 3 3 0.00 0.83333 27 3 3 0.00 0.83333 28 3 2 0.00 0.83333 29 3 3 0.00 0.83333 30 3 2 0.00 0.83333 31 4 1 0.25 0.66667 32 4 3 0.25 0.66667 33 4 3 0.25 0.66667 34 4 2 0.25 0.66667 35 4 2 0.25 0.66667 36 4 2 0.25 0.66667 37 4 3 0.25 0.66667 38 4 3 0.25 0.66667 39 4 4 0.25 0.66667 40 4 4 0.25 0.66667 41 5 1 0.60 0.40000 42 5 1 0.60 0.40000 43 5 2 0.60 0.40000 44 5 3 0.60 0.40000 45 5 1 0.60 0.40000 46 5 3 0.60 0.40000 47 5 4 0.60 0.40000

OBS ID CORCLASS HITRATE FLSRATE

48 5 4 0.60000 0.4 49 5 2 0.60000 0.4 50 5 4 0.60000 0.4 51 6 1 0.57143 1.0 52 6 3 0.57143 1.0 53 6 3 0.57143 1.0 54 6 1 0.57143 1.0 55 6 2 0.57143 1.0 56 6 1 0.57143 1.0 57 6 2 0.57143 1.0 58 6 2 0.57143 1.0 59 6 3 0.57143 1.0 60 6 1 0.57143 1.0

HTH

Ya Huang

"Robert Andrew Bowell Jr." wrote:

> Hello, > Below is the program we're working on. I'll now explain what > we're trying to do. > We have six subjects, undergoing repeated trials, and each > subjects can have 4 possible responses, which come out under the variable > CORCLASS. So, for example, subject X would have multiple responses in > different observations, possible outcomes for CORCLASS including 1, 2, 3 > or 4. > We want to arrive at 2 variables, I'll called HITRATE and > FLSERATE. Here's the formula: > > HITRATE=(frequency of CORCLASS value 1) / ((frequency of CORCLASS value 1) > + (frequency of CORCLASS value 2)) > > AND > > FLSERATE=(frequency of CORCLASS value 3) / ((frequency of CORCLASS value > 3) + (frequency of CORCLASS value 4)) > > This is then combined back into the original data set, so that > there should only be 6 possible values for HITRATE and six others for > FLSERATE. For some reason, I'm getting 11 values for HITRATE and 13 for > FLSERATE. This seems to come about because the COUNT (frequency of > CORCLASS responses 1 and 2 (or 3 and 4, depending on which dyad we're > looking at)) variable is fluctuating in ways it shouldn't. COUNT should > only have 1 value for each subject and CORCLASS dyad (CORCLASS dyads being > 1 and 2 or 3 and 4), but as this sample of a proc print output of the > merged data set shows, that's not the case: > > 75635 6 18 1 SKH 56 5 0 6 1 0 2 0.7695 3 0.7695 1493 9107 . 0.16394 > > 75636 6 18 1 RPZ 65 5 1 6 0 0 2 0.8789 3 0.8789 1493 15228 . 0.09804 > > 75637 6 18 1 LVH 71 5 1 6 0 0 2 0.6602 3 0.6602 1493 15228 . 0.09804 > > Can you help determine the source of these fluctuations? > > =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= > > data test; > infile 'd:\temp\Da271098.dat'; > input > @1 subject 2. > @3 session 2. > @5 conditn 1. > @10 trigram $3. > @14 trial 3. > @22 block 1. > @25 numpres 1. > @28 numint 1. > @31 stdytest 1. > @34 targdist 1. > @37 response 1. > @40 time 6. > @67 corclass 1. > @70 corrtime 6.; > run; > > data test; > set test; > if corclass=1 > then corclass=9; > else > if corclass=3 > then corclass=10; > else > if corclass=2 > then corclass=11; > else > > if corclass=0 > then corclass=12; > run; > > data test; > set test; > if corclass=9 > then corclass=1; > else > if corclass=10 > then corclass=2; > else > if corclass=11 > then corclass=3; > else > if corclass=12 > then corclass=4; > run; > > proc sort data=test; > by subject corclass; > run; > > data subset; > set test; > by subject corclass; > if first.corclass then total=0; > total + 1; > if last.corclass then output; > run; > > data test; > merge test subset; > by subject corclass; > run; > > data test2 (keep=subject corclass count); > set test; > by subject; > if first.subject then do; > count=0; > count2=0; > end; > count+total; > count2+1; > if count2=2 then do; > if corclass=2 then corclass=1; > else if corclass=4 then corclass=3; > output; > count2=0; > count=0; > end; > > run; > > data merged; > merge test test2; > by subject corclass; > run; > > data merged; > set merged; > if corclass=1 > then hitrate=total/count; > else hitrate=.; > if corclass=3 > then flserate=total/count; > else flserate=.; > run; > > proc print data=merged; > run; > > Y'obt., > Rob Bowell > ------------------------------------------------- > Programmer/Analyst, RUCS User Services Group > Hill Center, Room 209 > Phone: 732-445-0481/Fax: 732-445-5539 > -------------------------------------------------


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