Fluorite | Level 6

## table cohort varible name split problem

I have a problem with the variable name split. please see screen shot below. I combine cohort and unit together. how can I split (L) to below Fmax,  like(mg/kg)below Mmin. thanks a lot

currently program auto split, there should be a way to manually split.

```ods escapechar='^';

proc sort data=sashelp.class out=class;
by sex;
run;

data c1;
set class;
length sexf \$50.;
Weightln=log10(Weight);

if sex='M' then
do;
sexf2=strip(sex)||'min';
unit='mg/kg';
end;

if sex='F' then
do;
sexf2=strip(sex)||'max';
unit='L';
end;
sexf=strip(sexf2)||' ('||strip(unit)||')';

if index(sexf, 'max') then
sexf=tranwrd(sexf, 'max', '^{sub max}');

if index(sexf, 'min') then
sexf=tranwrd(sexf, 'min', '^{sub min}');
run;

proc sort data=c1;
by sexf;

PROC MEANS DATA=c1 NOPRINT;
BY sexf;
VAR Weight;
OUTPUT OUT=AB N=N0 MEAN=Mean0 CV=CV0 STD=SD0 STDERR=SE0 LCLM=LCLM UCLM=UCLM
MIN=MIN0 Q1=Q10 MEDIAN=Median0 Q3=Q30 MAX=MAX0;
RUN;

proc means data=c1 noprint;
var Weightln;
by sexf;
output out=cd mean=logmean var=varlog;
run;

data gcd;
set cd;
geomean=round(exp(logmean), .001);
run;

proc sql;
create table all as select a.*, b.geomean from AB a left join gcd b on
a.sexf=b.sexf;
quit;

proc format;
picture mnf (round) low-high='009.99';
picture sdf (round) low-high=' 009.99)' .='N/A)' (prefix='(');
picture minf (round) low-high='009.99;' (prefix='[');
picture maxf (round) low-high='009.99]';
run;

PROC tabulate data=all ORDER=data;
CLASS sexf;
VAR n0 MEAN0 SD0 se0 cv0 q10 median0 q30 MIN0 MAX0 geomean;
keyword mean / style=[just=R];
keyword StD / style=[just=L];
TABLE (n0='n'*max=''*f=4. mean0='Mean'*max=''*[style=[just=R cellwidth=70]
f=mnf.] SD0='(SD)'*max=''*[style=[just=L cellwidth=75] f=sdf.]
SE0='SE'*max=''*f=8.2 cv0='CV%'*max=''*f=8.2 Q10='Q1'*max=''*f=8.2
median0='Median'*max=''*f=8.2 Q30='Q3'*max=''*f=8.2
min0='Tmin'*max=''*f=minf. max0='Max'*max=''*f=maxf.), sexf=" " /
misstext='---' box=" sex" RTS=30;
RUN;```

1 ACCEPTED SOLUTION

Accepted Solutions
SAS Super FREQ

## Re: table header split problem

Hi:

I thought you wanted to change the value for the SEXF variable so that there was a line break after the subscript max. In the code you posted, you do this:

`````` if index(sexf, 'max') then
sexf=tranwrd(sexf, 'max', '^{sub max}');``````

so you know how to use ODS ESCAPECHAR. The ways to force the line to split for that column header are either 1) make the column width narrower to force (L) to the next line -- which may not work as you expect or 2) (a more reliable option) use ODS ESCAPECHAR to insert a line break or carriage return or new line into the string.

The previous posting that someone sent you showed the use of ESCAPECHAR+n, which is the older form of  the new line function. If you were going to use the newline function, it would be as shown below -- I just used SASHELP.CLASS and a format for the column headers instead of changing the variable name, but you can see the whole string you need to use to force a line break where you want:

Hope this helps,

Cynthia

4 REPLIES 4
Barite | Level 11

## Re: table header split problem

Fluorite | Level 6

## Re: table header split problem

I actually mean the variable name split, not the header.

SAS Super FREQ

## Re: table header split problem

Hi:

I thought you wanted to change the value for the SEXF variable so that there was a line break after the subscript max. In the code you posted, you do this:

`````` if index(sexf, 'max') then
sexf=tranwrd(sexf, 'max', '^{sub max}');``````

so you know how to use ODS ESCAPECHAR. The ways to force the line to split for that column header are either 1) make the column width narrower to force (L) to the next line -- which may not work as you expect or 2) (a more reliable option) use ODS ESCAPECHAR to insert a line break or carriage return or new line into the string.

The previous posting that someone sent you showed the use of ESCAPECHAR+n, which is the older form of  the new line function. If you were going to use the newline function, it would be as shown below -- I just used SASHELP.CLASS and a format for the column headers instead of changing the variable name, but you can see the whole string you need to use to force a line break where you want:

Hope this helps,

Cynthia

Fluorite | Level 6

## Re: table header split problem

Cynthia, thanks a lot, it works!!!

Discussion stats
• 4 replies
• 1597 views
• 4 likes
• 3 in conversation