<?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: Macros in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Macros/m-p/486540#M287167</link>
    <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13884"&gt;@ballardw&lt;/a&gt;: Sure, as you suggested I will remove duplicate values before transposing.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks a lot to all &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;It was my first, your inputs are very helpful. I have learnt different approaches for a problem.&lt;/P&gt;</description>
    <pubDate>Tue, 14 Aug 2018 05:39:00 GMT</pubDate>
    <dc:creator>Raj09</dc:creator>
    <dc:date>2018-08-14T05:39:00Z</dc:date>
    <item>
      <title>Macros</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macros/m-p/486071#M287159</link>
      <description>&lt;P&gt;Hi All,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Please help, i am stuck with my code.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Source table:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Id&lt;/TD&gt;&lt;TD&gt;Gender&lt;/TD&gt;&lt;TD&gt;Marks&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;Eng lish&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;Maths&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;English&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;Science&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;F&lt;/TD&gt;&lt;TD&gt;Maths&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;Eng lish&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;Maths&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;Social&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="4" color="#800000"&gt;&lt;STRONG&gt;Required output:&amp;nbsp;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Id&lt;/TD&gt;&lt;TD&gt;Gender&lt;/TD&gt;&lt;TD&gt;Eng_lish&lt;/TD&gt;&lt;TD&gt;Maths&lt;/TD&gt;&lt;TD&gt;Science&lt;/TD&gt;&lt;TD&gt;Social&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Y&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;I am using transpose and&amp;nbsp; sas macros to get the above output.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;NAME OF FORMER&lt;/TD&gt;&lt;TD&gt;COL1&lt;/TD&gt;&lt;TD&gt;COL2&lt;/TD&gt;&lt;TD&gt;COL3&lt;/TD&gt;&lt;TD&gt;COL4&lt;/TD&gt;&lt;TD&gt;COL5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;VARIABLE&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Marks_new&lt;/TD&gt;&lt;TD&gt;Eng lish&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;Marks_new&lt;/TD&gt;&lt;TD&gt;Maths&lt;/TD&gt;&lt;TD&gt;Eng lish&lt;/TD&gt;&lt;TD&gt;Science&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;Marks_new&lt;/TD&gt;&lt;TD&gt;Maths&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;Marks_new&lt;/TD&gt;&lt;TD&gt;Maths&lt;/TD&gt;&lt;TD&gt;Eng lish&lt;/TD&gt;&lt;TD&gt;Maths&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;Social&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;After transposing, counting&amp;nbsp; COL1 - COL..n to do the loop. I am using COL count and variable count to do the loop. Since variable names are having space i am using tranwrd to replace space with '_' and assigning original value as Label.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;My SAS code:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Data t;&lt;BR /&gt;input ID Gender $ Marks $50.;&lt;BR /&gt;cards;&lt;BR /&gt;1 F Eng lish&lt;BR /&gt;1 F&lt;BR /&gt;2 M Maths&lt;BR /&gt;2 M Eng lish&lt;BR /&gt;2 M Science&lt;BR /&gt;2 M&lt;BR /&gt;3 F Maths&lt;BR /&gt;4 M Maths&lt;BR /&gt;4 M Eng lish&lt;BR /&gt;4 M Maths&lt;BR /&gt;4 M&lt;BR /&gt;4 M Social&lt;BR /&gt;;&lt;/P&gt;&lt;P&gt;data tt;&lt;BR /&gt;set t;&lt;BR /&gt;Marks_new=compress(Marks, "");&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;PROC TRANSPOSE DATA=tt OUT=t1;&lt;BR /&gt;BY id;&lt;BR /&gt;VAR Marks_new;&lt;BR /&gt;RUN;&lt;/P&gt;&lt;P&gt;proc contents data=t1 out=list (keep=Name);&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;proc sql;&lt;BR /&gt;select count(compress(name,,'kd')) into: ct from list where name ne"";&lt;BR /&gt;select count(distinct Marks) into: var_ct from tt where Marks ne "";&lt;BR /&gt;select distinct Marks_new into: var1-: var%eval(&amp;amp;var_ct) from tt where Marks ne "";&lt;BR /&gt;select distinct Marks into: label1-: label%eval(&amp;amp;var_ct) from tt where Marks ne "";&lt;BR /&gt;quit;&lt;/P&gt;&lt;P&gt;%put &amp;amp;lqbel1 &amp;amp;var1;&lt;/P&gt;&lt;P&gt;%macro m();&lt;BR /&gt;%if &amp;amp;ct. &amp;gt; &amp;amp;var_ct. %then %do;&lt;BR /&gt;data my (drop = Col1-&amp;amp;Col%eval(&amp;amp;ct);&lt;BR /&gt;set t1;&lt;BR /&gt;%DO i=1 %TO &amp;amp;ct.;&lt;BR /&gt;%IF COL&amp;amp;i= &amp;amp;&amp;amp;var&amp;amp;i.. %THEN %cmpres(&amp;amp;&amp;amp;var&amp;amp;i..)='Y';&lt;BR /&gt;&amp;amp;&amp;amp;var&amp;amp;i.. label = &amp;amp;&amp;amp;label&amp;amp;i..;&lt;BR /&gt;%end;&lt;BR /&gt;run;&lt;BR /&gt;%end;&lt;BR /&gt;%else &amp;amp;ct. &amp;lt; &amp;amp;var_ct. %then %do;&lt;/P&gt;&lt;P&gt;data my (drop = Col1-&amp;amp;Col%eval(&amp;amp;var_ct);&lt;BR /&gt;set t1;&lt;BR /&gt;%DO i=1 %TO &amp;amp;var_ct.;&lt;BR /&gt;%IF COL&amp;amp;i= &amp;amp;&amp;amp;var&amp;amp;i.. %THEN %cmpres(&amp;amp;&amp;amp;var&amp;amp;i..)='Y';&lt;BR /&gt;&amp;amp;&amp;amp;var&amp;amp;i.. label = &amp;amp;&amp;amp;label&amp;amp;i..;&lt;BR /&gt;%end;&lt;BR /&gt;run;&lt;BR /&gt;%end;&lt;BR /&gt;%mend;&lt;BR /&gt;%m();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Many thanks in advance.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Raj&lt;/P&gt;</description>
      <pubDate>Sat, 11 Aug 2018 18:30:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macros/m-p/486071#M287159</guid>
      <dc:creator>Raj09</dc:creator>
      <dc:date>2018-08-11T18:30:10Z</dc:date>
    </item>
    <item>
      <title>Re: Macros</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macros/m-p/486243#M287160</link>
      <description>Please help</description>
      <pubDate>Mon, 13 Aug 2018 04:52:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macros/m-p/486243#M287160</guid>
      <dc:creator>Raj09</dc:creator>
      <dc:date>2018-08-13T04:52:52Z</dc:date>
    </item>
    <item>
      <title>Re: Macros</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macros/m-p/486320#M287161</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/225849"&gt;@Raj09&lt;/a&gt;&lt;/P&gt;
&lt;P&gt;If it's a report you're after then below should do.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;Data have;
  input ID Gender $ Marks $50.;
  Marks_new=compress(Marks);
  cards;
1 F Eng lish
1 F
2 M Maths
2 M Eng lish
2 M Science
2 M
3 F Maths
4 M Maths
4 M Eng lish
4 M Maths
4 M
4 M Social
;
run;

proc format;
  value mark_yn
    low-high='Y'
    other=' '
    ;
run;

proc tabulate data=have;
  class id gender Marks_new;
  keylabel n=' ';
  table id*gender, marks_new=' '*f=mark_yn.;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Capture.JPG" style="width: 296px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/22412i83FEC998FB57FFD8/image-size/large?v=v2&amp;amp;px=999" role="button" title="Capture.JPG" alt="Capture.JPG" /&gt;&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Mon, 13 Aug 2018 10:54:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macros/m-p/486320#M287161</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2018-08-13T10:54:12Z</dc:date>
    </item>
    <item>
      <title>Re: Macros</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macros/m-p/486335#M287162</link>
      <description>&lt;P&gt;Thanks a lot Patrick. Output looks perfect. But, only problem is I need to save this output and do further analysis. Proc tabulate output is not in desired shape with out option.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Kindly suggest.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 13 Aug 2018 11:32:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macros/m-p/486335#M287162</guid>
      <dc:creator>Raj09</dc:creator>
      <dc:date>2018-08-13T11:32:30Z</dc:date>
    </item>
    <item>
      <title>Re: Macros</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macros/m-p/486362#M287163</link>
      <description>&lt;P&gt;You need to aggregate the data first, and then use Proc TRANSPOSE, see example below. I used the original "Eng lish" value, with the System option VALIDVARNAME=V7 you can ensure, that any special chars for varibales names are translated into and underscore.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Is there a reason to have lines where marks has no value?&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;Data have;
  input ID Gender $ Marks $50.;
  Marks_new=compress(Marks);
  cards;
1 F Eng lish
1 F
2 M Maths
2 M Eng lish
2 M Science
2 M
3 F Maths
4 M Maths
4 M Eng lish
4 M Maths
4 M
4 M Social
;
run;

proc sql;
	create table have2 as
	select
		id
		, gender
		, marks
		, case
			when count(*) &amp;gt;= 1 then "Y"
			else " "
		  end as indicator
	from
		have
	group by
		id
		, gender
		, marks
	;
quit;


options validvarname=v7;
proc transpose
	data=have2
	out=want(
		drop=_name_
	)
;
	by id gender;
	id marks;
	var indicator;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 13 Aug 2018 14:42:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macros/m-p/486362#M287163</guid>
      <dc:creator>BrunoMueller</dc:creator>
      <dc:date>2018-08-13T14:42:42Z</dc:date>
    </item>
    <item>
      <title>Re: Macros</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macros/m-p/486372#M287164</link>
      <description>&lt;P&gt;What kind of analysis you plan to do with the transposed data? The original format seems to be better suited for any kind of analysis i can think of.&lt;/P&gt;</description>
      <pubDate>Mon, 13 Aug 2018 15:00:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macros/m-p/486372#M287164</guid>
      <dc:creator>andreas_lds</dc:creator>
      <dc:date>2018-08-13T15:00:38Z</dc:date>
    </item>
    <item>
      <title>Re: Macros</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macros/m-p/486385#M287165</link>
      <description>&lt;P&gt;Slightly simplified:&lt;/P&gt;
&lt;PRE&gt;Data t;
input ID Gender $ Marks $50.;
val='Y';
cards;
1 F English
1 F
2 M Maths
2 M English
2 M Science
2 M
3 F Maths
4 M Maths
4 M English
4 M Maths
4 M
4 M Social
;

PROC TRANSPOSE DATA=t OUT=t1 let;
BY id;
id marks;
VAR val;
RUN;&lt;/PRE&gt;
&lt;P&gt;though I would recommend using a numeric 1 instead of "Y" .&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The above code will generate warning in the log about "ID value repeats for by groups" and observations dropped for missing ID values.&lt;/P&gt;
&lt;P&gt;And are your kind of odd records of id and gender with no marks come from some external source that has that as a summary row or similar? If you don't need those records I recommend dropping them as soon as practical.&lt;/P&gt;</description>
      <pubDate>Mon, 13 Aug 2018 15:24:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macros/m-p/486385#M287165</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2018-08-13T15:24:12Z</dc:date>
    </item>
    <item>
      <title>Re: Macros</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macros/m-p/486538#M287166</link>
      <description>Yes, you are right original data looks fine. We have stranded macros, input for those macros to be in the output that i required. Hence, i need to set the data in the same format. It is actually a patient and disease data. Just to mask the data i changed variable names and values.</description>
      <pubDate>Tue, 14 Aug 2018 05:29:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macros/m-p/486538#M287166</guid>
      <dc:creator>Raj09</dc:creator>
      <dc:date>2018-08-14T05:29:53Z</dc:date>
    </item>
    <item>
      <title>Re: Macros</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macros/m-p/486540#M287167</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/13884"&gt;@ballardw&lt;/a&gt;: Sure, as you suggested I will remove duplicate values before transposing.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks a lot to all &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;It was my first, your inputs are very helpful. I have learnt different approaches for a problem.&lt;/P&gt;</description>
      <pubDate>Tue, 14 Aug 2018 05:39:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macros/m-p/486540#M287167</guid>
      <dc:creator>Raj09</dc:creator>
      <dc:date>2018-08-14T05:39:00Z</dc:date>
    </item>
  </channel>
</rss>

