BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
dapenDaniel
Obsidian | Level 7

Hi,

 

I have a panel dataset like below.

 

data have;
input Firm1 $ Firm2 $ Year flag ratio;
datalines;
AA1	BB	1995	0	0
AA1	BB	1996	0	0
AA1	BB	1997	0	0.5
AA1	BB	1998	1	0.6
AA1	BB	1999	0	0.5
AA1	CC	1995	0	0.4
AA1	CC	1996	0	0.3
AA1	CC	1997	0	0.2
AA1	CC	1998	1	0.1
AA1	CC	1999	0	0
AA2	DD	1995	0	0.9
AA2	DD	1996	1	0.5
AA2	DD	1997	0	0.4
AA2	DD	1998	1	0.6
AA2	DD	1999	0	0
AA2	EE	1995	1	0.3
AA2	EE	1996	1	0.4
AA2	EE	1997	0	0.9
AA2	EE	1998	0	0
AA2	EE	1999	0	0
;
run;

I would like to calculate the average where flag = 1 for each firm in Firm1 in each year. If there is no flag=1 in a year, the average is 0. The expected output is below.

Firm1Yearaverage
AA119950
AA119960
AA119970
AA119980.35
AA119990
AA219950.3
AA219960.45
AA219970
AA219980.6
AA219990

 

what program do I need to use? Thanks.

1 ACCEPTED SOLUTION

Accepted Solutions
ballardw
Super User

Do you want a data set or a report?

 

Either approach could start with this modified data:

data have;
input Firm1 $ Firm2 $ Year flag ratio;
weightedratio = flag*ratio;
datalines;
AA1	BB	1995	0	0
AA1	BB	1996	0	0
AA1	BB	1997	0	0.5
AA1	BB	1998	1	0.6
AA1	BB	1999	0	0.5
AA1	CC	1995	0	0.4
AA1	CC	1996	0	0.3
AA1	CC	1997	0	0.2
AA1	CC	1998	1	0.1
AA1	CC	1999	0	0
AA2	DD	1995	0	0.9
AA2	DD	1996	1	0.5
AA2	DD	1997	0	0.4
AA2	DD	1998	1	0.6
AA2	DD	1999	0	0
AA2	EE	1995	1	0.3
AA2	EE	1996	1	0.4
AA2	EE	1997	0	0.9
AA2	EE	1998	0	0
AA2	EE	1999	0	0
;
run;

And then calculate the mean of the new variable.

Dataset:

proc summary data=have nway;
	class firm1 year;
	var weightedratio;
	output out=work.want (drop=_freq_ _type_)
	     mean= 
run; 

Report

proc report data=have;
	columns firm1 year weightedratio;
   define firm1 / group;
   define year /  group;
   define weightedratio / mean;
run; 

View solution in original post

4 REPLIES 4
ballardw
Super User

Do you want a data set or a report?

 

Either approach could start with this modified data:

data have;
input Firm1 $ Firm2 $ Year flag ratio;
weightedratio = flag*ratio;
datalines;
AA1	BB	1995	0	0
AA1	BB	1996	0	0
AA1	BB	1997	0	0.5
AA1	BB	1998	1	0.6
AA1	BB	1999	0	0.5
AA1	CC	1995	0	0.4
AA1	CC	1996	0	0.3
AA1	CC	1997	0	0.2
AA1	CC	1998	1	0.1
AA1	CC	1999	0	0
AA2	DD	1995	0	0.9
AA2	DD	1996	1	0.5
AA2	DD	1997	0	0.4
AA2	DD	1998	1	0.6
AA2	DD	1999	0	0
AA2	EE	1995	1	0.3
AA2	EE	1996	1	0.4
AA2	EE	1997	0	0.9
AA2	EE	1998	0	0
AA2	EE	1999	0	0
;
run;

And then calculate the mean of the new variable.

Dataset:

proc summary data=have nway;
	class firm1 year;
	var weightedratio;
	output out=work.want (drop=_freq_ _type_)
	     mean= 
run; 

Report

proc report data=have;
	columns firm1 year weightedratio;
   define firm1 / group;
   define year /  group;
   define weightedratio / mean;
run; 
dapenDaniel
Obsidian | Level 7

Thank you, @ballardw 

Ksharp
Super User

Opps. Read OP one more time .

 

data have;
infile cards expandtabs truncover;
input Firm1 $ Firm2 $ Year flag ratio;
weightedratio = flag*ratio;
datalines;
AA1	BB	1995	0	0
AA1	BB	1996	0	0
AA1	BB	1997	0	0.5
AA1	BB	1998	1	0.6
AA1	BB	1999	0	0.5
AA1	CC	1995	0	0.4
AA1	CC	1996	0	0.3
AA1	CC	1997	0	0.2
AA1	CC	1998	1	0.1
AA1	CC	1999	0	0
AA2	DD	1995	0	0.9
AA2	DD	1996	1	0.5
AA2	DD	1997	0	0.4
AA2	DD	1998	1	0.6
AA2	DD	1999	0	0
AA2	EE	1995	1	0.3
AA2	EE	1996	1	0.4
AA2	EE	1997	0	0.9
AA2	EE	1998	0	0
AA2	EE	1999	0	0
;
run;
proc sql;
select Firm1,year,case when sum(flag=1)=count(*) then avg(ratio) 
when sum(flag=1)=0 then 0
else sum(flag*ratio)/sum(flag=1) end as average
 from have
  group by Firm1,year;
quit;

 

 

dapenDaniel
Obsidian | Level 7

Thank you, @Ksharp 

sas-innovate-white.png

🚨 Early Bird Rate Extended!

Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9.

 

Lock in the best rate now before the price increases on April 1.

Register now!

Mastering the WHERE Clause in PROC SQL

SAS' Charu Shankar shares her PROC SQL expertise by showing you how to master the WHERE clause using real winter weather data.

Find more tutorials on the SAS Users YouTube channel.

Discussion stats
  • 4 replies
  • 931 views
  • 0 likes
  • 3 in conversation