Solved
Contributor
Posts: 49

# Proc format truncation of values

Hi All,

The formatted values were gettng truncated to a length of 20, when the data have the values which were not covered in below expected values.

Ex: Raw data: "Once every 6 months in 2 cycles 15 days apart", which is not present in the proc format.

Formatted value: "Once every 6 months" instead of full length value.

PROC FORMAT LIBRARY=work;
Value \$CMFREQ

"1" = "BID"
"2" = "TID"
"3" = "QID"
"4" = "QD"
"5" = "QM"
"6" = "PRN"
"7" = "Twice in the morning"
"8" = "Twice in the evening"
"9" = "Before meals"
"Q 6 months"= "Q6M"
;
run;

data cm;
length cmfreq \$100.;
set raw.cm;
where cmfreqot ne '';
cmfreq = put(cmfreqot, \$CMFREQ.);

keep cmfreqot cmfreq;
run;

Thank you

Accepted Solutions
Solution
‎04-19-2017 07:54 AM
Super User
Posts: 9,606

## Re: Proc format truncation of values

Yes, tricky one.  Had to think about it for a while.  Simplest way is to put other= and specify the format:

```proc format library=work;
value \$cmfreq
"1" = "BID"
"2" = "TID"
"3" = "QID"
other=[\$100.]
;
run;

data cm;
length cmfreq cmfreqtot \$100.;
infile datalines dlm="¬" missover;
input cmfreqtot \$;
cmfreq=put(cmfreqtot, \$CMFREQ.);
datalines;
3
A really long string which should push the twenty character bounds
;
run;```

All Replies
Solution
‎04-19-2017 07:54 AM
Super User
Posts: 9,606

## Re: Proc format truncation of values

Yes, tricky one.  Had to think about it for a while.  Simplest way is to put other= and specify the format:

```proc format library=work;
value \$cmfreq
"1" = "BID"
"2" = "TID"
"3" = "QID"
other=[\$100.]
;
run;

data cm;
length cmfreq cmfreqtot \$100.;
infile datalines dlm="¬" missover;
input cmfreqtot \$;
cmfreq=put(cmfreqtot, \$CMFREQ.);
datalines;
3
A really long string which should push the twenty character bounds
;
run;```
Contributor
Posts: 49

## Re: Proc format truncation of values

Many Thanks for your swift response. Issue solved now.

Much appreicated.

SAS Super FREQ
Posts: 825

## Re: Proc format truncation of values

Hi

Another way would be, to specify the default length for the format. See sample below.

``````proc format library=work;
value \$cmfreq (default=100)
"1" = "BID"
"2" = "TID"
"3" = "QID"
;
run;

data cm;
infile datalines dlm="¬" truncover;
input cmfreqtot \$100.;
cmfreq=put(cmfreqtot, \$CMFREQ.);
datalines;
3
2
1
A really long string which should push the twenty character bounds
abc
;
``````

Bruno

Super User
Posts: 8,127

## Re: Proc format truncation of values

You can define a default width when you define the format.

``````PROC FORMAT LIBRARY=work;
value \$CMFREQ (default=100)
"1" = "BID"
"2" = "TID"
"3" = "QID"
"4" = "QD"
"5" = "QM"
"6" = "PRN"
"7" = "Twice in the morning"
"8" = "Twice in the evening"
"9" = "Before meals"
"Q 6 months"= "Q6M"
;
run;``````

Or you can specify the width when you use the format.

``cmfreq = put(cmfreqot, \$CMFREQ100.);``
Posts: 1,147

## Re: Proc format truncation of values

PLease try the default=100 in proc format

like below

PROC FORMAT LIBRARY=work;
Value \$CMFREQ (default=100)
"1" = "BID"
"2" = "TID"
"3" = "QID"
"4" = "QD"
"5" = "QM"
"6" = "PRN"
"7" = "Twice in the morning"
"8" = "Twice in the evening"
"9" = "Before meals"
"Q 6 months"= "Q6M"
;
run;
Thanks,
Jag
Contributor
Posts: 49

Super User
Posts: 10,787

## Re: Proc format truncation of values

```cmfreq = put(cmfreqot, \$CMFREQ100.);

```
☑ This topic is solved.

Discussion stats
• 7 replies
• 627 views
• 1 like
• 6 in conversation