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

Below is my code and ouput.

 

I transposed "xy" dataset into  "final" dataset, then used proc report to output.

If anyone know a way to output the data directly from 'xy' datasets with proc report. Thanks.

 

 

 11.jpg

 

 /******CODE*****************************************/

/* Data part**/

data a;
trt="1"; output;
trt="2"; output;
trt="3"; output;
run;
data a;
trt="1"; output;
trt="2"; output;
trt="3"; output;
run;
data b;
event="a"; num=2; output;
event="b"; num=3; output;
event="c"; num=4; output;
run;

proc sql;
create table x as
select a.*, b.*
from a, b
order by b.event, a.trt;

create table y as
select event, sum(num) as total
from x
group by event;

create table xy as
select a.*, b.total, round(a.num/b.total*100,0.1) as per
from x as a, y as b
where a.event=b.event
order by event, trt;
quit;

/*Data part end*/

 

 

proc transpose data=xy out=xy_1 prefix=num;
by event;
id trt;
var num;
run;

 

proc transpose data=xy out=xy_2 prefix=per;
by event;
id trt;
var per;
run;

 

data final;
merge xy_1 xy_2;
by event;
drop _name_;
run;


ods rtf file= "C:\XXXXX\123.rtf";
proc report data=final;
column event ("trt1" (num1 per1)) ("trt2" (num2 per2)) ("trt3" (num3 per3));
define num:/display "n" center;
define per:/ display "%" center;
run;
ods rtf close;

 /****************************************/

1 ACCEPTED SOLUTION

Accepted Solutions
Jagadishkatam
Amethyst | Level 16

Without the transpose we could use the proc report on xy dataset to get the output as below, try

 

data xy_;
length trt1 $10.;
set xy;
trt1=cats('trt',trt);
run;

proc report data=xy_;
column event (trt1),(num per);
define event /group width=10;
define trt1 / ' ' across order=internal;
define num/ "n" center ;
define per/  "%" center;
run;

 

Thanks,
Jag

View solution in original post

3 REPLIES 3
Jagadishkatam
Amethyst | Level 16

Without the transpose we could use the proc report on xy dataset to get the output as below, try

 

data xy_;
length trt1 $10.;
set xy;
trt1=cats('trt',trt);
run;

proc report data=xy_;
column event (trt1),(num per);
define event /group width=10;
define trt1 / ' ' across order=internal;
define num/ "n" center ;
define per/  "%" center;
run;

 

Thanks,
Jag
Niugg2010
Obsidian | Level 7

Thanks. It works.

Jagadishkatam
Amethyst | Level 16
Thanks,
Could I request you to please mark this answer correct, it will help everyone in the community to quickly point to the best answers.
Thanks,
Jag

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
  • 1234 views
  • 0 likes
  • 2 in conversation