The SAS Output Delivery System and reporting techniques

#byval for defining column names

Reply
New Contributor
Posts: 4

#byval for defining column names


Hi

Can we use #byval for defining column names in proc report instead of using only in titles?

Thanks

Super User
Super User
Posts: 7,039

Re: #byval for defining column names

Perhaps you can format your report using the by variable as an across variable?

New Contributor
Posts: 4

Re: #byval for defining column names

Thanks Tom

But i am not doing across here. I am dividing my report into different parts using by statement..so across will not serve the purpose...

SAS Super FREQ
Posts: 8,862

Re: #byval for defining column names


Hi:

  I thought Tom's response was a good suggestion. Honestly, without seeing any data or code, it was really hard to imagine what you meant when you asked about using " #byval for defining column names in proc report". I just couldn't figure out how a BY variable would alter the column names in the report. Since the BY variable is used to determine page breaks -- thus dividing your report into different parts -- it is hard to visualize what you want. You can use a BY variable in PROC REPORT in your COLUMN statement -- so if you did by chance need to use the variable's value in a COLUMN, it would have to happen as part of the COLUMN statement. You may not actually need a BY variable at all in your PROC REPORT. However, without some kind of example of what you want and what you've tried, code-wise, it is nearly impossible to make a constructive suggestion.

cynthia

New Contributor
Posts: 4

Re: #byval for defining column names

Posted in reply to Cynthia_sas

/*Hi*/

/*Below is the code which i have tried.*/
/*In mail output for first report i want the column name(r3 ) to be displayed as 'F' and in */
/*second report i want it as 'M' but i am not able to get in mail. So please help.*/

DATA survey;
   INPUT id gender $ age inc r1 r2 r3 ;
   DATALINES;
1  F  35 17  7 2 2
17  M  50 14  5 5 3
33  F  45  6  7 2 7
49  M  24 14  7 5 7
65  F  52  9  4 7 7
81  M  44 11  7 7 7
2   F  34 17  6 5 3
18  M  40 14  7 5 2
34  F  47  6  6 5 6
50  M  35 17  5 7 5
;
run;
proc sort data=survey;
by gender;
run;

options nobyline;
filename smsmail email from = "<abcd@tyg.com>"
to = "test@abc.com"
subject="test"
CT = "TEXT/HTML";
ods _all_ close;
ODS LISTING CLOSE;
ODS HTML BODY = smsmail RS=NONE STYLE = NORMAL;
proc report data=survey;
column id gender  age inc r1 r2 r3 ;
by gender;
define r3/ '#byval1                                          ';
run;
ods html close;/*Hi*/

/*Below is the code which i have tried.*/
/*In mail output for first report i want the column name(r3 ) to be displayed as 'F' and in */
/*second report i want it as 'M' but i am not able to get in mail. So please help.*/

DATA survey;
   INPUT id gender $ age inc r1 r2 r3 ;
   DATALINES;
1  F  35 17  7 2 2
17  M  50 14  5 5 3
33  F  45  6  7 2 7
49  M  24 14  7 5 7
65  F  52  9  4 7 7
81  M  44 11  7 7 7
2   F  34 17  6 5 3
18  M  40 14  7 5 2
34  F  47  6  6 5 6
50  M  35 17  5 7 5
;
run;
proc sort data=survey;
by gender;
run;

options nobyline;
filename smsmail email from = "<abcd@tyg.com>"
to = "test@abc.com"
subject="test"
CT = "TEXT/HTML";
ods _all_ close;
ODS LISTING CLOSE;
ODS HTML BODY = smsmail RS=NONE STYLE = NORMAL;
proc report data=survey;
column id gender  age inc r1 r2 r3 ;
by gender;
define r3/ '#byval1                                          ';
run;
ods html close;

Super User
Super User
Posts: 7,039

Re: #byval for defining column names

Here is one way to use GENDER as an ACROSS variable above R3 to have the value of GENDER appear in the column heading.


data survey (index=(gender));

   input id gender $ age inc r1 r2 r3 @@;

cards;

1 F 35 17 7 2 2 17 M 50 14 5 5 3 33 F 45 6 7 2 7 49 M 24 14 7 5 7

65 F 52 9 4 7 7 81 M 44 11 7 7 7 2 F 34 17 6 5 3 18 M 40 14 7 5 2

34 F 47 6 6 5 6 50 M 35 17 5 7 5

run;

proc report data=survey nofs headline nocenter list;

  by gender;

  column id age inc r1 r2 gender,r3 ;

  define _all_ / order order=data ;

  define gender / across ' ';

  define r3 / display ' ';

run;

TITLE1

gender=F

                                                                 F

         id        age        inc         r1         r2

  ----------------------------------------------------------------

          1         35         17          7          2          2

         33         45          6          7          2          7

         65         52          9          4          7          7

          2         34         17          6          5          3

         34         47          6          6          5          6

TITLE1

gender=M

                                                                 M

         id        age        inc         r1         r2

  ----------------------------------------------------------------

         17         50         14          5          5          3

         49         24         14          7          5          7

         81         44         11          7          7          7

         18         40         14          7          5          2

         50         35         17          5          7          5



SAS Super FREQ
Posts: 8,862

Re: #byval for defining column names

Hi:

And, if you change Tom's COLUMN statement just a bit (just put r3,gender instead of gender,r3) , you can move the M or F down on the same header row with the other variables(because REPORT places headers in the order they occur in the COLUMN statement):

  column id age inc r1 r2 r3,gender ;

cynthia

New Contributor
Posts: 4

Re: #byval for defining column names

Posted in reply to Cynthia_sas

Thanks Tom and Cynthia

just one more thing, am using 'rbreak after'  as well for summarization in proc report but i am not able to get total for r3 column. Is there any solution for this..?

SAS Super FREQ
Posts: 8,862

Re: #byval for defining column names

Hi:

  I'd suggest you read about PROC REPORT and the DEFINE statement with the RBREAK statement. You have defined the usage of r3 to be DISPLAY usage. PROC REPORT considers that you do NOT want any summarizing to happen when you specify DISPLAY as the usage. The usage of SUM or ANALYSIS SUM (instead of DISPLAY) will allow PROC REPORT to summarize the R3 variable.

define r3 / sum ' ';

cynthia

Ask a Question
Discussion stats
  • 8 replies
  • 1200 views
  • 3 likes
  • 3 in conversation