- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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;
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Many Thanks for your swift response. Issue solved now.
Much appreicated.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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.);
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
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;
Jag
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Thank you Jagadish
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
cmfreq = put(cmfreqot, $CMFREQ100.);