## 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

1 ACCEPTED SOLUTION

Accepted Solutions

## 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;```
7 REPLIES 7

## 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;```

## Re: Proc format truncation of values

Many Thanks for your swift response. Issue solved now.

Much appreicated.

## 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

## 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.);``

## 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

## Re: Proc format truncation of values  Ksharp
Super User

## Re: Proc format truncation of values

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

```
Discussion stats
• 7 replies
• 7378 views
• 5 likes
• 6 in conversation