Help using Base SAS procedures

Creating a character variable using Proc Report

Accepted Solution Solved
Reply
Occasional Contributor
Posts: 7
Accepted Solution

Creating a character variable using Proc Report

Hello,

 

Is it possible to compute/create a character variable in proc report? What I would like to do is take 2 numbers, a create a new character variable that puts them in a from that looks something like this: (18.2, 21.1). However, it seems that maybe compute blocks can only create numeric variables. Is there a way around this?

 

Thanks!

 

proc surveyfreq data=d1;

tables walk / row cl nowt nostd;

stratum final_stratum;

cluster final_cluster;

weight final_weight;

ods output oneway=out_table;

run;

 

proc report data=out_table;

columns table percent lowerCL UpperCL CL;

define table / display;

define percent / display;

define lowerCL / display;

define UpperCL / display;

define CL / computed ;

compute CL; CL = cats("(", LowerCL, ",", UpperCL, ")"); ENDCOMP;

run;

 

Error message:

 

NOTE: Character values have been converted to numeric values at the places given by:

(Line)Smiley SadColumn).

1:7

NOTE: Invalid numeric data, '(78.900921457,81.793697714)' , at line 1 column 7.

NOTE: Invalid numeric data, '(18.206302286,21.099078543)' , at line 1 column 7.

NOTE: Invalid numeric data, '(_,_)' , at line 1 column 7.

NOTE: There were 3 observations read from the data set WORK.out_table.

NOTE: At least one W.D format was too small for the number to be printed. The decimal may be

shifted by the "BEST" format.


Accepted Solutions
Solution
‎02-14-2017 12:32 PM
SAS Super FREQ
Posts: 8,743

Re: Creating a character variable using Proc Report

Hi,
Yes, you can calculate a character variable in a COMPUTE block, but you have to tell the COMPUTE block that it is character. The default is numeric. So instead of this:
compute CL;
CL = cats("(", LowerCL, ",", UpperCL, ")");
ENDCOMP;

use this:
compute CL / character length=20;
CL = cats("(", LowerCL, ",", UpperCL, ")");
ENDCOMP;

cynthia

View solution in original post


All Replies
Super User
Posts: 10,490

Re: Creating a character variable using Proc Report

Since you are not actually calculating the values for the limits in the proc report I would think the easier way would be in an intermediate datastep;

data out_table;
   set out_table;
   CL = cats("(", LowerCL, ",", UpperCL, ")"); 
run;

before the Proc report.

 

I would probably use a Put(lowercl,best6.) or similar in the cats function unless you really think the additional digits are helpful.

 

I know of a method that involves custom format to supply leading (, leading comma with trailing ) , style justifications of right and left for adjacent columns, reducing the cellpadding and border widths to 0 to get that appearance in calculated columns

Solution
‎02-14-2017 12:32 PM
SAS Super FREQ
Posts: 8,743

Re: Creating a character variable using Proc Report

Hi,
Yes, you can calculate a character variable in a COMPUTE block, but you have to tell the COMPUTE block that it is character. The default is numeric. So instead of this:
compute CL;
CL = cats("(", LowerCL, ",", UpperCL, ")");
ENDCOMP;

use this:
compute CL / character length=20;
CL = cats("(", LowerCL, ",", UpperCL, ")");
ENDCOMP;

cynthia
Occasional Contributor
Posts: 7

Re: Creating a character variable using Proc Report

Thank you both for your helpful replies!

☑ This topic is SOLVED.

Need further help from the community? Please ask a new question.

Discussion stats
  • 3 replies
  • 138 views
  • 2 likes
  • 3 in conversation