- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Posted 02-09-2025 01:56 AM
(549 views)
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;
2 REPLIES 2
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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%
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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;