Help using Base SAS procedures

Proc format truncation of values

Accepted Solution Solved
Reply
Contributor
Posts: 49
Accepted Solution

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.

 

Could you please help on this.


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
Super User
Posts: 7,401

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;

View solution in original post


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

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: 683

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
Super User
Posts: 6,500

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.);
Trusted Advisor
Posts: 1,128

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

Re: Proc format truncation of values

Thank you Jagadish

Super User
Posts: 9,681

Re: Proc format truncation of values

cmfreq = put(cmfreqot, $CMFREQ100.);

☑ This topic is SOLVED.

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

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