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

Hi everyone!

 

A part of my dataset agg_amihud_vw  is as below:

LOC	year	_TYPE_	_FREQ_	agg_amh_vw
ARG	1999	3	    13	    .
ARG	2000	3	    12	    0.0000227405
ARG	2001	3	    11	    0.0002002287
AUS	1999	3	    116	    .
AUS	2000	3	    99	    0.0000199988
AUS	2001	3	    90	    0.0000241868
AUT	1999	3	    26	    .
AUT	2000	3	    24	    0.0001970891
AUT	2001	3	    21	    0.0002672976
BEL	1999	3	    62	    .
BEL	2000	3	    53	    0.0002912877
BEL	2001	3	    50	    0.0002791486

what I want is to calculate means of agg_amihud_vw through all year in each country. In particular, the desired result is

LOC	_TYPE_	_FREQ_	final_amh
ARG	1	    3	    0.0001114846
AUS	1	    3	    0.0000220928
AUT	1	    3	    0.0002321934
BEL	1	    3	    0.0002852182

The code I am using is very simple

proc means data=agg_amihud_vw noprint nway;
	class LOC;
	var agg_amh_vw;
	output out=final_amihud mean=final_amh;
run;

However, I am not sure if we can use PROC SQL to do the same thing? I am trying to write the code, I know the code below is wrong but is there any code similar to this one and can be applied to get my desired result above?

proc sql;
	select sum(agg_amh_vw)/ count(agg_amh_vw) as value format 32.12
	by LOC /* I know this line is wrong*/
	from agg_amihud_vw;
	
quit;

Many thanks and warmest regards!

 

 

 

 

 

Thank you for your help, have a fabulous and productive day! I am a novice today, but someday when I accumulate enough knowledge, I can help others in my capacity.
1 ACCEPTED SOLUTION

Accepted Solutions
Tom
Super User Tom
Super User

You are looking for the GROUP BY feature of SQL.  Make sure to include the grouping variable(s) in the select list.

 

Also in SAS you can use the MEAN() aggregate function directly.  Other implementations of SQL might use a different name for that function, like AVERAGE().

 

proc sql;
select loc
     , mean(agg_amh_vw) as final_amh
  from agg_amihud_vw
  group by loc
;
quit;

 

 

View solution in original post

3 REPLIES 3
Shmuel
Garnet | Level 18

Try next sql code:

proc sql;
	select sum(agg_amh_vw)/ count(agg_amh_vw) as value format 32.12
	from agg_amihud_vw
	group by LOC;
quit;
Tom
Super User Tom
Super User

You are looking for the GROUP BY feature of SQL.  Make sure to include the grouping variable(s) in the select list.

 

Also in SAS you can use the MEAN() aggregate function directly.  Other implementations of SQL might use a different name for that function, like AVERAGE().

 

proc sql;
select loc
     , mean(agg_amh_vw) as final_amh
  from agg_amihud_vw
  group by loc
;
quit;

 

 

Phil_NZ
Barite | Level 11

Hi @Tom 

Thank you for your suggested code, yay, the line "select LOC" matters.

I adjust a little bit the code to make the result totally align with my code using proc means

proc sql;
	create table agg_amihud_vw as 
	select LOC
		,mean(agg_amh_vw) as final_amh
	  from agg_amihud_vw
	  group by LOC
	;
run;

armest regards.

Thank you for your help, have a fabulous and productive day! I am a novice today, but someday when I accumulate enough knowledge, I can help others in my capacity.

hackathon24-white-horiz.png

The 2025 SAS Hackathon has begun!

It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.

Latest Updates

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 3 replies
  • 837 views
  • 3 likes
  • 3 in conversation