I'm attempting to order a proc report output for an outlook email and having issues order by values of a formatted column. I've tried sorting the data with a proc sort before my proc report statement but it does seem to have any affect on the sort order. I've also tried to use the 'order order=internal' option with my define statement of my formatted column but that results in my formatted column to lose its formatting and does not sort the data.
data weight;
infile datalines missover;
input IDnumber $ Week1;
datalines;
1 15
2 22
3 6
4 17
5 19
6 3
7 29
;
proc format;
value cfmt
low-10='red'
10-20 ='yellow'
20-high='green'
;
value dot
low-high='^{style [vjust=top fontsize=10pt]^{unicode 2B24}}';
run;
proc sort data=weight out=weight1; by Week1; run;
ods escapechar="^";
options emailsys=smtp;
options emailauthprotocol=none;
options emailhost= ;
/*options emailport=25;*/
options emailID = ;
options emailpw = ;
filename temp email
to =
/* cc = */
/* bcc = */
subject="test"
type="text/html"
from = ;
title;
ODS html body=temp;
PROC REPORT DATA=weight1 headline headskip split='*'
style(column header summary) = {font_size=2 background=white font_face="Arial" vjust=c};
column Week1 IDNUMBER;
define Week1/ style(column)=[foreground=cfmt. vjust=c] format=dot. ' ';
DEFINE IDNUMBER / group style(column)=[vjust=c] center 'ID' width=12;
run;
ods _all_ close;
And the output as follows:
My desired output would be the IDs ordered ascending by the raw value of the weight column.
When changing my define statement of week1 to the following:
define Week1/ order order=internal style(column)=[foreground=cfmt. vjust=c] format=dot. ' ';
I get a the following output that I can't interpret what is being done for:
Any insight into any alternative approaches or what I may have wrong would be greatly appreciated.
order=data (to match the current data order)?
Is this what you want?
PROC REPORT DATA=weight1 headline headskip split='*'
style(column header summary) = {font_size=2 background=white font_face="Arial" vjust=c};
column Week1 IDNUMBER;
define Week1/ style(column)=[foreground=cfmt. vjust=c] format=dot. ' ';
DEFINE IDNUMBER / order=data group style(column)=[vjust=c] center 'ID' width=12;
run;
-unison
order=data (to match the current data order)?
Is this what you want?
PROC REPORT DATA=weight1 headline headskip split='*'
style(column header summary) = {font_size=2 background=white font_face="Arial" vjust=c};
column Week1 IDNUMBER;
define Week1/ style(column)=[foreground=cfmt. vjust=c] format=dot. ' ';
DEFINE IDNUMBER / order=data group style(column)=[vjust=c] center 'ID' width=12;
run;
-unison
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.