Date: Mon, 22 Jan 2007 10:48:14 -0500
Reply-To: Venky Chakravarthy <swovcc@HOTMAIL.COM>
Sender: "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From: Venky Chakravarthy <swovcc@HOTMAIL.COM>
Subject: Re: means first. -- wonder if this is possible in a single
datastep
I would calculate the means using PROC MEANS or SUMMARY. It is somewhat
unusual to take the means for visit 1 only.
proc summary data = test nway ;
class visit ;
var var1 var2 ;
by pat treat ;
output out = visit1 (drop = _:)
mean = var1 var2 ;
where visit = 1 ;
format var1 var2 8.2 ;
run ;
data result ;
set test (where = (visit^=1)) visit1 ;
by pat treat visit ;
run ;
Venky Chakravarthy
On Mon, 22 Jan 2007 10:04:05 -0500, Hari Nath <hari_s_nath@YAHOO.COM> wrote:
>Hi all,
> iam trying to get the means for only visit 1 and then trying to keep
>this in a same datastep.....can someone point me in right way...
>Many thanks
>hari
>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>data test ;
> input pat $ treat $ visit var1 var2 ;
> cards ;
> 1000 A 1 100 90
> 1000 A 1 70 50
> 1000 A 1 30 50
> 1000 A 2 20 30
> 1000 A 2 50 60
> 1000 A 2 40 20
> 1000 A 3 50 30
> 1000 A 3 60 30
> 2000 B 1 80 90
> 2000 B 1 . .
> 2000 B 1 . .
> 2000 B 2 30 30
> 2000 B 2 40 60
> 2000 B 2 80 20
> 2000 B 3 30 30
> 2000 B 3 40 30
> ;
>run ;
>
>proc sort data=test ; by pat treat visit ; run ;
>
>data test2 ;
> retain var1_b var2_b ;
> set test ;
> by pat treat visit ;
>
> if visit=1 then do ;
>
>
> if first.visit then do ;
> var1_b = 0 ;
> var2_b = 0 ;
> counter=0;
> end ;
> var1_b = sum(var1 + var1_b) ;
> var2_b = sum(var2 + var2_b) ;
> counter + 1 ;
>
> if last.visit then do ;
> var1_b = round(var1_b / counter,.01) ;
> var2_b = round(var2_b / counter,.01) ;
> end ;
>
> end ;
>
> else if visit ^= 1 then do ;
> var1_b = var1 ;
> var2_b = var2 ;
> counter=0 ;
>
> end ;
>/* if last.visit ne . then output ;*/
>run ;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>
>current output ;
>
>pat treat visit var1 var2 var1b var2b
>
> 1000 A 1 100 90 100 90
> 1000 A 1 70 50 170 140
> 1000 A 1 30 50 66.67 63.33
> 1000 A 2 20 30 20 30
> 1000 A 2 50 60 50 60
> 1000 A 2 40 20 40 20
> 1000 A 3 50 30 50 30
> 1000 A 3 60 30 60 30
> 2000 B 1 80 90 80 90
> 2000 B 1 . . . .
> 2000 B 1 . . . .
> 2000 B 2 30 30 30 30
> 2000 B 2 40 60 40 60
> 2000 B 2 80 20 80 20
> 2000 B 3 30 30 30 30
> 2000 B 3 40 30 40 30
>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>
>desired output ;
>
>pat treat visit var1 var2 var1b var2b
>
> 1000 A 1 30 50 66.67 63.33
> 1000 A 2 20 30 20 30
> 1000 A 2 50 60 50 60
> 1000 A 2 40 20 40 20
> 1000 A 3 50 30 50 30
> 1000 A 3 60 30 60 30
> 2000 B 1 80 90 80 90
> 2000 B 2 30 30 30 30
> 2000 B 2 40 60 40 60
> 2000 B 2 80 20 80 20
> 2000 B 3 30 30 30 30
> 2000 B 3 40 30 40 30
>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>