<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Partial proc format in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/Partial-proc-format/m-p/523146#M73461</link>
    <description>&lt;P&gt;Check the values in your variable and make sure they match the values used in your format.&amp;nbsp; Including case and location of blanks or other invisible characters.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Also why aren't you using quotes around the character values in your format definition?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Why are you making multiple formats that have the exact same definition?&amp;nbsp; You can just make one format and attach that to multiple variables.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro readmit(indata, outdata);
proc format;
value $event_name
  'readmission_1_arm_1'='Readmit 1' 'readmission_2_arm_1'='Readmit 2'
  'readmission_3_arm_1'='Readmit 3' 'readmission_4_arm_1'='Readmit 4'
  'readmission_5_arm_1'='Readmit 5' 'readmission_6_arm_1'='Readmit 6'
  'readmission_7_arm_1'='Readmit 7' 'readmission_8_arm_1'='Readmit 8'
  'readmission_9_arm_1'='Readmit 9' 'readmission_10_arm_1'='Readmit 10'
  'readmission_11_arm_1'='Readmit 11' 'readmission_12_arm_1'='Readmit 12'
  'readmission_13_arm_1'='Readmit 13' 'readmission_14_arm_1'='Readmit 14'
  'readmission_15_arm_1'='Readmit 15' 'readmission_16_arm_1'='Readmit 16'
  'readmission_17_arm_1'='Readmit 17' 'readmission_18_arm_1'='Readmit 18'
  'readmission_19_arm_1'='Readmit 19' 'readmission_20_arm_1'='Readmit 20'
  'readmission_21_arm_1'='Readmit 21' 'readmission_22_arm_1'='Readmit 22'
  'readmission_23_arm_1'='Readmit 23' 'readmission_24_arm_1'='Readmit 24'
  'readmission_25_arm_1'='Readmit 25' 'readmission_26_arm_1'='Readmit 26'
  'readmission_27_arm_1'='Readmit 27' 'readmission_28_arm_1'='Readmit 28'
  'readmission_29_arm_1'='Readmit 29' 'readmission_30_arm_1'='Readmit 30'
;
run;

data &amp;amp;outdata.;
  set &amp;amp;indata.;
  format &amp;amp;outdata._event_name $event_name.;
run;
%mend readmit;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Fri, 21 Dec 2018 19:32:22 GMT</pubDate>
    <dc:creator>Tom</dc:creator>
    <dc:date>2018-12-21T19:32:22Z</dc:date>
    <item>
      <title>Partial proc format</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Partial-proc-format/m-p/523140#M73459</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am unsure if there is a limitation to proc format that I am not considering, but my proc format is only formatting part of the data.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Below is the macro I'm running in SAS 9.4:&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro readmit(indata, outdata);

proc format;
    value $&amp;amp;outdata._event_name_ readmission_1_arm_1='Readmit 1' readmission_2_arm_1='Readmit 2' readmission_3_arm_1='Readmit 3' 
		readmission_4_arm_1='Readmit 4' readmission_5_arm_1='Readmit 5' readmission_6_arm_1='Readmit 6' readmission_7_arm_1='Readmit 7' 
		readmission_8_arm_1='Readmit 8' readmission_9_arm_1='Readmit 9' readmission_10_arm_1='Readmit 10' readmission_11_arm_1='Readmit 11' 
		readmission_12_arm_1='Readmit 12' readmission_13_arm_1='Readmit 13' readmission_14_arm_1='Readmit 14' readmission_15_arm_1='Readmit 15' 
		readmission_16_arm_1='Readmit 16' readmission_17_arm_1='Readmit 17' readmission_18_arm_1='Readmit 18' readmission_19_arm_1='Readmit 19'
		readmission_20_arm_1='Readmit 20' readmission_21_arm_1='Readmit 21' readmission_22_arm_1='Readmit 22' readmission_23_arm_1='Readmit 23'
		readmission_24_arm_1='Readmit 24' readmission_25_arm_1='Readmit 25' readmission_26_arm_1='Readmit 26' readmission_27_arm_1='Readmit 27'
		readmission_28_arm_1='Readmit 28' readmission_29_arm_1='Readmit 29' readmission_30_arm_1='Readmit 30';
run;

data &amp;amp;outdata.;
	set &amp;amp;indata.;
	format &amp;amp;outdata._event_name &amp;amp;outdata._event_name_.;
	run;
%mend;

%readmit(readmissions, readmit);&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;While readmissions 1-20 (readmission_1_arm_1 - readmission_20_arm_1) are formatted correctly to Readmit 1 - Readmit 20, the formatting is not being applied to readmissions 21+ (readmission_21_arm_1 -&amp;nbsp;readmission_30_arm_1). These later ones are formated as&amp;nbsp;readmissio.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks in advance!&lt;/P&gt;</description>
      <pubDate>Fri, 21 Dec 2018 19:07:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Partial-proc-format/m-p/523140#M73459</guid>
      <dc:creator>azz</dc:creator>
      <dc:date>2018-12-21T19:07:40Z</dc:date>
    </item>
    <item>
      <title>Re: Partial proc format</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Partial-proc-format/m-p/523143#M73460</link>
      <description>&lt;P&gt;There are some bugs in your code, I'm assuming you get errors when you run the code you posted because I did.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Note that you need a space in the PROC FORMAT. Also when you apply the format you need a $ in front of the format name. See the highlighted portions below.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This as posted, works for me. I created some fake data at the bottom that shows this. I would check your source data. My guess is your source data does not have the correct data. A quick way to check this, which you should&amp;nbsp;always do in a recode, is to run a PROC FREQ and check the output.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;%macro readmit(indata, outdata);

proc format;
    value &lt;FONT size="5"&gt;&lt;STRONG&gt;&lt;FONT color="#FF0000"&gt;$&lt;/FONT&gt; &lt;/STRONG&gt;&lt;/FONT&gt;&amp;amp;outdata._event_name_ 
readmission_1_arm_1='Readmit 1' readmission_2_arm_1='Readmit 2' readmission_3_arm_1='Readmit 3' 
		readmission_4_arm_1='Readmit 4' readmission_5_arm_1='Readmit 5' readmission_6_arm_1='Readmit 6' readmission_7_arm_1='Readmit 7' 
		readmission_8_arm_1='Readmit 8' readmission_9_arm_1='Readmit 9' readmission_10_arm_1='Readmit 10' readmission_11_arm_1='Readmit 11' 
		readmission_12_arm_1='Readmit 12' readmission_13_arm_1='Readmit 13' readmission_14_arm_1='Readmit 14' readmission_15_arm_1='Readmit 15' 
		readmission_16_arm_1='Readmit 16' readmission_17_arm_1='Readmit 17' readmission_18_arm_1='Readmit 18' readmission_19_arm_1='Readmit 19'
		readmission_20_arm_1='Readmit 20' readmission_21_arm_1='Readmit 21' readmission_22_arm_1='Readmit 22' readmission_23_arm_1='Readmit 23'
		readmission_24_arm_1='Readmit 24' readmission_25_arm_1='Readmit 25' readmission_26_arm_1='Readmit 26' readmission_27_arm_1='Readmit 27'
		readmission_28_arm_1='Readmit 28' readmission_29_arm_1='Readmit 29' readmission_30_arm_1='Readmit 30';
run;

data &amp;amp;outdata.;
	set &amp;amp;indata.;
	format &lt;FONT size="5"&gt;&lt;STRONG&gt;&lt;FONT color="#800080"&gt;value&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/FONT&gt; &lt;FONT size="5" color="#FF0000"&gt;&lt;STRONG&gt;$&lt;/STRONG&gt;&lt;/FONT&gt;&amp;amp;outdata._event_name_.;
	run;
%mend;


*sample data;
data demo;
do i=1 to 30;
value = catt('readmission_', put(i, 8. -l), '_arm_1');
output;
end;
run;
&lt;BR /&gt;*test;
%readmit(demo, want);


&lt;/PRE&gt;
&lt;P&gt;How you would check this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class="language-sas"&gt;%macro readmit(indata, outdata);

proc format;
    value $ &amp;amp;outdata._event_name_ 
readmission_1_arm_1='Readmit 1' readmission_2_arm_1='Readmit 2' readmission_3_arm_1='Readmit 3' 
		readmission_4_arm_1='Readmit 4' readmission_5_arm_1='Readmit 5' readmission_6_arm_1='Readmit 6' readmission_7_arm_1='Readmit 7' 
		readmission_8_arm_1='Readmit 8' readmission_9_arm_1='Readmit 9' readmission_10_arm_1='Readmit 10' readmission_11_arm_1='Readmit 11' 
		readmission_12_arm_1='Readmit 12' readmission_13_arm_1='Readmit 13' readmission_14_arm_1='Readmit 14' readmission_15_arm_1='Readmit 15' 
		readmission_16_arm_1='Readmit 16' readmission_17_arm_1='Readmit 17' readmission_18_arm_1='Readmit 18' readmission_19_arm_1='Readmit 19'
		readmission_20_arm_1='Readmit 20' readmission_21_arm_1='Readmit 21' readmission_22_arm_1='Readmit 22' readmission_23_arm_1='Readmit 23'
		readmission_24_arm_1='Readmit 24' readmission_25_arm_1='Readmit 25' readmission_26_arm_1='Readmit 26' readmission_27_arm_1='Readmit 27'
		readmission_28_arm_1='Readmit 28' readmission_29_arm_1='Readmit 29' readmission_30_arm_1='Readmit 30';
run;

data &amp;amp;outdata.;
	set &amp;amp;indata.;
	recoded_var = put(value, $&amp;amp;outdata._event_name_.);
	run;

%*check recoding;

title 'Check recoding against original';
proc freq data=want;
table value*recoded_var /list;
run;
title;
%mend;



data demo;
do i=1 to 30;
value = catt('readmission_', put(i, 8. -l), '_arm_1');
output;
end;
run;



%readmit(demo, want);

&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;And last but not least, this macro is overkill, since the number is in your data, you can replace this with a one line string function and scan.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;data demo;
	do i=1 to 30;
		value = catt('readmission_', put(i, 8. -l), '_arm_1');
		&lt;FONT size="5" color="#339966"&gt;&lt;STRONG&gt;new_name = catx(" ", "Readmit", scan(value, 2, '_'));&lt;/STRONG&gt; &lt;/FONT&gt;
	output;
	end;
run;
&lt;/PRE&gt;
&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/252262"&gt;@azz&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I am unsure if there is a limitation to proc format that I am not considering, but my proc format is only formatting part of the data.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Below is the macro I'm running in SAS 9.4:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro readmit(indata, outdata);

proc format;
    value $&amp;amp;outdata._event_name_ readmission_1_arm_1='Readmit 1' readmission_2_arm_1='Readmit 2' readmission_3_arm_1='Readmit 3' 
		readmission_4_arm_1='Readmit 4' readmission_5_arm_1='Readmit 5' readmission_6_arm_1='Readmit 6' readmission_7_arm_1='Readmit 7' 
		readmission_8_arm_1='Readmit 8' readmission_9_arm_1='Readmit 9' readmission_10_arm_1='Readmit 10' readmission_11_arm_1='Readmit 11' 
		readmission_12_arm_1='Readmit 12' readmission_13_arm_1='Readmit 13' readmission_14_arm_1='Readmit 14' readmission_15_arm_1='Readmit 15' 
		readmission_16_arm_1='Readmit 16' readmission_17_arm_1='Readmit 17' readmission_18_arm_1='Readmit 18' readmission_19_arm_1='Readmit 19'
		readmission_20_arm_1='Readmit 20' readmission_21_arm_1='Readmit 21' readmission_22_arm_1='Readmit 22' readmission_23_arm_1='Readmit 23'
		readmission_24_arm_1='Readmit 24' readmission_25_arm_1='Readmit 25' readmission_26_arm_1='Readmit 26' readmission_27_arm_1='Readmit 27'
		readmission_28_arm_1='Readmit 28' readmission_29_arm_1='Readmit 29' readmission_30_arm_1='Readmit 30';
run;

data &amp;amp;outdata.;
	set &amp;amp;indata.;
	format &amp;amp;outdata._event_name &amp;amp;outdata._event_name_.;
	run;
%mend;

%readmit(readmissions, readmit);&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;While readmissions 1-20 (readmission_1_arm_1 - readmission_20_arm_1) are formatted correctly to Readmit 1 - Readmit 20, the formatting is not being applied to readmissions 21+ (readmission_21_arm_1 -&amp;nbsp;readmission_30_arm_1). These later ones are formated as&amp;nbsp;readmissio.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks in advance!&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 21 Dec 2018 19:23:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Partial-proc-format/m-p/523143#M73460</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2018-12-21T19:23:10Z</dc:date>
    </item>
    <item>
      <title>Re: Partial proc format</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Partial-proc-format/m-p/523146#M73461</link>
      <description>&lt;P&gt;Check the values in your variable and make sure they match the values used in your format.&amp;nbsp; Including case and location of blanks or other invisible characters.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Also why aren't you using quotes around the character values in your format definition?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Why are you making multiple formats that have the exact same definition?&amp;nbsp; You can just make one format and attach that to multiple variables.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%macro readmit(indata, outdata);
proc format;
value $event_name
  'readmission_1_arm_1'='Readmit 1' 'readmission_2_arm_1'='Readmit 2'
  'readmission_3_arm_1'='Readmit 3' 'readmission_4_arm_1'='Readmit 4'
  'readmission_5_arm_1'='Readmit 5' 'readmission_6_arm_1'='Readmit 6'
  'readmission_7_arm_1'='Readmit 7' 'readmission_8_arm_1'='Readmit 8'
  'readmission_9_arm_1'='Readmit 9' 'readmission_10_arm_1'='Readmit 10'
  'readmission_11_arm_1'='Readmit 11' 'readmission_12_arm_1'='Readmit 12'
  'readmission_13_arm_1'='Readmit 13' 'readmission_14_arm_1'='Readmit 14'
  'readmission_15_arm_1'='Readmit 15' 'readmission_16_arm_1'='Readmit 16'
  'readmission_17_arm_1'='Readmit 17' 'readmission_18_arm_1'='Readmit 18'
  'readmission_19_arm_1'='Readmit 19' 'readmission_20_arm_1'='Readmit 20'
  'readmission_21_arm_1'='Readmit 21' 'readmission_22_arm_1'='Readmit 22'
  'readmission_23_arm_1'='Readmit 23' 'readmission_24_arm_1'='Readmit 24'
  'readmission_25_arm_1'='Readmit 25' 'readmission_26_arm_1'='Readmit 26'
  'readmission_27_arm_1'='Readmit 27' 'readmission_28_arm_1'='Readmit 28'
  'readmission_29_arm_1'='Readmit 29' 'readmission_30_arm_1'='Readmit 30'
;
run;

data &amp;amp;outdata.;
  set &amp;amp;indata.;
  format &amp;amp;outdata._event_name $event_name.;
run;
%mend readmit;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 21 Dec 2018 19:32:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Partial-proc-format/m-p/523146#M73461</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2018-12-21T19:32:22Z</dc:date>
    </item>
    <item>
      <title>Re: Partial proc format</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Partial-proc-format/m-p/523148#M73462</link>
      <description>&lt;P&gt;Thanks Reeza! It looks like the second $ when applying the format&amp;nbsp;was what caused the issue. I appreciate your suggestion for a cleaner string function. I'll definitely try to clean up the code a bit&amp;nbsp;in this macro.&lt;/P&gt;</description>
      <pubDate>Fri, 21 Dec 2018 19:33:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Partial-proc-format/m-p/523148#M73462</guid>
      <dc:creator>azz</dc:creator>
      <dc:date>2018-12-21T19:33:24Z</dc:date>
    </item>
    <item>
      <title>Re: Partial proc format</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Partial-proc-format/m-p/523157#M73463</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/252262"&gt;@azz&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;Thanks Reeza! It looks like the second $ when applying the format&amp;nbsp;was what caused the issue. I appreciate your suggestion for a cleaner string function. I'll definitely try to clean up the code a bit&amp;nbsp;in this macro.&lt;/P&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;You must have had some other error.&amp;nbsp; SAS will silently add the $ for you.&amp;nbsp; If you accidentally leave the $ out of the format specification when attaching a format to a character variable in a FORMAT statement then SAS will look for a character format with the same base name as the numeric format your code used.&amp;nbsp; If it is found then there is no message, but if it is not found then you get an error message.&lt;/P&gt;
&lt;PRE&gt;268    format y xyz. ;
                ----
                484
NOTE 484-185: Format $XYZ was not found or could not be loaded.&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 21 Dec 2018 19:59:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Partial-proc-format/m-p/523157#M73463</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2018-12-21T19:59:01Z</dc:date>
    </item>
    <item>
      <title>Re: Partial proc format</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/Partial-proc-format/m-p/523172#M73464</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/159"&gt;@Tom&lt;/a&gt;&amp;nbsp;The other error was in the format definition so the format never got created.&lt;/P&gt;
&lt;P&gt;I highlighted that line in the code as well.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 21 Dec 2018 20:26:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/Partial-proc-format/m-p/523172#M73464</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2018-12-21T20:26:33Z</dc:date>
    </item>
  </channel>
</rss>

