Hello
What is the way to calculate percentage of X and of W for each group (group is defined by Z1).
I want to calculate it via proc report and display the report via proc report
Thanks
Data have;
input z1 $ Z2 x w;
cards;
A 1 10 20
A 2 20 30
A 3 40 50
B 1 15 30
B 2 25 30
B 3 40 50
;
run;
proc sql;
create table t1 as
select sum(X) as TOTAL_X,
sum(w) as TOTAL_w
from have
;
quit;
data t2;
set have ;
if _n_=1 then set t1;
PCT_X=X/TOTAL_X;
PCT_W=W/TOTAL_w;
format PCT_X PCT_W percent8.1;
Run;
proc report data=t2;
run;
Define both z1 and z2 as group, calculate sums for groups defined by z1, and the compute the percentages:
data have;
input z1 $ z2 x w;
cards;
A 1 10 20
A 2 20 30
A 3 40 50
B 1 15 30
B 2 25 30
B 3 40 50
;
proc report data=have;
column z1 z2 x pct_x w pct_w;
define z1 / group;
define z2 / group;
define x / analysis;
define pct_x / computed format=percent8.2;
define w / analysis;
define pct_w / computed format=percent8.2;
compute before z1;
x_sum = x.sum;
w_sum = w.sum;
endcomp;
compute pct_x;
pct_x = x.sum / x_sum;
endcomp;
compute pct_w;
pct_w = w.sum / w_sum;
endcomp;
run;
Result:
z1 z2 x pct_x w pct_w A 1 10 14.29% 20 20.00% 2 20 28.57% 30 30.00% 3 40 57.14% 50 50.00% B 1 15 18.75% 30 27.27% 2 25 31.25% 30 27.27% 3 40 50.00% 50 45.45%
I would prefer to use PROC SQL rather than PROC REPORT to get it .
Data have;
input z1 $ Z2 x w;
cards;
A 1 10 20
A 2 20 30
A 3 40 50
B 1 15 30
B 2 25 30
B 3 40 50
;
run;
proc report data=have nowd;
columns z1 z2 x w total_x total_w pct_x pct_w;
define z1/display;
define z2/display;
define x/analysis sum;
define w/analysis sum;
define total_x/computed;
define total_w/computed;
define pct_x/computed format=percent7.1;
define pct_w/computed format=percent7.1;
compute before ;
x_sum=x.sum;
w_sum=w.sum;
endcomp;
compute total_x;
total_x=x_sum;
endcomp;
compute total_w;
total_w=w_sum;
endcomp;
compute pct_x;
pct_x=x.sum/x_sum;
endcomp;
compute pct_w;
pct_w=w.sum/w_sum;
endcomp;
run;
It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.
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.
Ready to level-up your skills? Choose your own adventure.