<?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: Macro loop to generate Proc Tabulate by origin in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Macro-loop-to-generate-Proc-Tabulate-by-origin/m-p/679442#M205169</link>
    <description>&lt;PRE&gt;%macro comp;
%local i reg;

	%do i=1 %to 3;

		proc sql ;
		select QUOTE(reg_name)
		into
		:reg_name 
		from classes
		where id_reg = &amp;amp;i.;
		quit;

		PROC TABULATE DATA = data out=tabulate_&amp;amp;i;
		where Origin in (&amp;amp;reg_name.);
		CLASS Make DriveTrain   ; 
		TABLE (Make), (DriveTrain)   / nocellmerge ; 
		run;

	%end;
%mend comp;
%comp&lt;/PRE&gt;</description>
    <pubDate>Wed, 26 Aug 2020 13:10:10 GMT</pubDate>
    <dc:creator>yabwon</dc:creator>
    <dc:date>2020-08-26T13:10:10Z</dc:date>
    <item>
      <title>Macro loop to generate Proc Tabulate by origin</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-loop-to-generate-Proc-Tabulate-by-origin/m-p/679386#M205140</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;In SASHELP.CARS, I would like to make a PROC TABULATE by Origin. So, the first way is to make 3 PROC TABULATE like the following and replace "Asia" by USA and then Europe :&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;		PROC TABULATE DATA = data out=tabulate;
		where Origin="Asia";
		CLASS Make DriveTrain   ; 
		TABLE (Make), (DriveTrain)   / nocellmerge ; 
		run;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;But, instead, I would like to automatize this in a macro loop. Could you please help me why the following code won’t work&amp;nbsp;? It’s the «&amp;nbsp;&lt;STRONG&gt;where Origin=reg;&lt;/STRONG&gt;&amp;nbsp;» part that seems to be the problem. Thank you&amp;nbsp;!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data data; set sashelp.cars;run;

data classes;
input id_reg reg_name $ ; 
cards;
1 Asia 
2 Europe 
3 USA 
run;

%macro comp;
%local i reg;

	%do i=1 %to 3;

		proc sql ;
		select reg_name
		into
		:reg_name 
		from classes
		where id_reg = &amp;amp;i.;
		quit;

		%let reg=reg_name;

		PROC TABULATE DATA = data out=tabulate_&amp;amp;i;
		where Origin=reg;
		CLASS Make DriveTrain   ; 
		TABLE (Make), (DriveTrain)   / nocellmerge ; 
		run;

	%end;
%mend comp;
%comp&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;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 26 Aug 2020 10:05:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-loop-to-generate-Proc-Tabulate-by-origin/m-p/679386#M205140</guid>
      <dc:creator>commitsudoku</dc:creator>
      <dc:date>2020-08-26T10:05:26Z</dc:date>
    </item>
    <item>
      <title>Re: Macro loop to generate Proc Tabulate by origin</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-loop-to-generate-Proc-Tabulate-by-origin/m-p/679389#M205142</link>
      <description>&lt;P&gt;No need for a macro. Simply create a "3-dimensional" table like this&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;PROC TABULATE DATA = sashelp.cars out=tabulate;
    CLASS Origin Make DriveTrain;
    TABLE Origin, Make, DriveTrain / nocellmerge;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 26 Aug 2020 10:01:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-loop-to-generate-Proc-Tabulate-by-origin/m-p/679389#M205142</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2020-08-26T10:01:01Z</dc:date>
    </item>
    <item>
      <title>Re: Macro loop to generate Proc Tabulate by origin</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-loop-to-generate-Proc-Tabulate-by-origin/m-p/679391#M205143</link>
      <description>&lt;P&gt;Yes, I understand but I made a simple example. In the real database I work with, I need to make a macro &lt;span class="lia-unicode-emoji" title=":slightly_smiling_face:"&gt;🙂&lt;/span&gt; this is why I insist on making a macro.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 26 Aug 2020 10:19:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-loop-to-generate-Proc-Tabulate-by-origin/m-p/679391#M205143</guid>
      <dc:creator>commitsudoku</dc:creator>
      <dc:date>2020-08-26T10:19:36Z</dc:date>
    </item>
    <item>
      <title>Re: Macro loop to generate Proc Tabulate by origin</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-loop-to-generate-Proc-Tabulate-by-origin/m-p/679396#M205146</link>
      <description>&lt;P&gt;Working with a database doesn't change the validity of the suggestion from&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/31304"&gt;@PeterClemmensen&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Or if it does make a difference, please explain why.&lt;/P&gt;</description>
      <pubDate>Wed, 26 Aug 2020 10:46:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-loop-to-generate-Proc-Tabulate-by-origin/m-p/679396#M205146</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2020-08-26T10:46:23Z</dc:date>
    </item>
    <item>
      <title>Re: Macro loop to generate Proc Tabulate by origin</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-loop-to-generate-Proc-Tabulate-by-origin/m-p/679399#M205148</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;first, use &lt;STRONG&gt;an ampersand &amp;amp;&lt;/STRONG&gt;:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;PROC TABULATE DATA = data out=tabulate_&amp;amp;i;
		where Origin=&amp;amp;reg; /* &amp;lt;-------- an &amp;amp; */
		CLASS Make DriveTrain   ; 
		TABLE (Make), (DriveTrain)   / nocellmerge ; 
		run;&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;second: try:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;select quote(reg_name)
		into...&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;since, I believe, you want to have:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;where Orgin = "Asia"&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;rather than:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;LI-CODE lang="markup"&gt;where Orgin = Asia&lt;/LI-CODE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;after the &amp;amp;reg. resolution&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;third, this part:&lt;/P&gt;
&lt;PRE class="language-sas"&gt;&lt;CODE&gt;%let reg=reg_name;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;is redundant, reg_name is already a macrovariable so you can use it inside the proc tabulate (btw. you don't have the &lt;STRONG&gt;"&amp;amp;"&lt;/STRONG&gt; here again)&lt;/P&gt;
&lt;P&gt;should be: %let reg = &amp;amp;reg_name; if you want it to work.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;All the best&lt;/P&gt;
&lt;P&gt;Bart&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;</description>
      <pubDate>Wed, 26 Aug 2020 11:09:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-loop-to-generate-Proc-Tabulate-by-origin/m-p/679399#M205148</guid>
      <dc:creator>yabwon</dc:creator>
      <dc:date>2020-08-26T11:09:55Z</dc:date>
    </item>
    <item>
      <title>Re: Macro loop to generate Proc Tabulate by origin</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-loop-to-generate-Proc-Tabulate-by-origin/m-p/679407#M205152</link>
      <description>&lt;P&gt;I guess I'm going to disagree with&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/35763"&gt;@yabwon&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This code is easily handled with a BY statement, and no macro or macro variable is needed.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;PROC TABULATE DATA = data out=tabulate;
		by Origin;
		CLASS Make DriveTrain   ; 
		TABLE (Make), (DriveTrain)   / nocellmerge ; 
		run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 26 Aug 2020 12:06:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-loop-to-generate-Proc-Tabulate-by-origin/m-p/679407#M205152</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2020-08-26T12:06:07Z</dc:date>
    </item>
    <item>
      <title>Re: Macro loop to generate Proc Tabulate by origin</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-loop-to-generate-Proc-Tabulate-by-origin/m-p/679418#M205159</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/10892"&gt;@PaigeMiller&lt;/a&gt;&amp;nbsp;no need for disagree. I didn't tell I like OPs code. I just pointed out places where the root cause of the "where issue" might be.&amp;nbsp;&lt;span class="lia-unicode-emoji" title=":winking_face:"&gt;😉&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;All the best&lt;/P&gt;
&lt;P&gt;Bart&lt;/P&gt;</description>
      <pubDate>Wed, 26 Aug 2020 12:25:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-loop-to-generate-Proc-Tabulate-by-origin/m-p/679418#M205159</guid>
      <dc:creator>yabwon</dc:creator>
      <dc:date>2020-08-26T12:25:29Z</dc:date>
    </item>
    <item>
      <title>Re: Macro loop to generate Proc Tabulate by origin</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-loop-to-generate-Proc-Tabulate-by-origin/m-p/679422#M205161</link>
      <description>&lt;P&gt;Reply made to same question as cross posted to stackoverflow...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Use a `BY` statement to independently process like grouped subsets of a data set.&lt;BR /&gt;Use a `WHERE` statement to select the subset(s) to process.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Example:&lt;/P&gt;
&lt;PRE&gt;ods html file='output.html' style=plateau;

proc sort data=sashelp.cars out=cars_sorted;
  by origin;
run;

title; footnote;
options nocenter nodate nonumber;

PROC TABULATE DATA=cars_sorted;
  by origin;
  where Origin in ("Asia", "Europe", "USA");

  where also make &amp;gt;= 'P'; * further subset for reduced size of output screen shot;

  CLASS Make DriveTrain ; 
  TABLE (Make), (DriveTrain) / nocellmerge ;
run;

ods html close;
&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Alternatively, use a `TABLE` statement of form `&amp;lt;page dimension&amp;gt;,&amp;lt;row dimension&amp;gt;,&amp;lt;column dimension&amp;gt;` in lieu of `BY` group processing. Such a form does not need presorted data because the &amp;lt;page dimension&amp;gt; is constructed from `CLASS` variables.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Example:&lt;/P&gt;
&lt;PRE&gt;PROC TABULATE DATA=sashelp.cars; /* original data, not sorted */
  where Origin in ("Asia", "Europe", "USA");
  where also make &amp;gt;= 'P'; * further subset for reduced size of output screen shot;

  CLASS Origin Make DriveTrain ; /* Origin added to CLASS */
  TABLE Origin, (Make), (DriveTrain) / nocellmerge ; /* Origin is page dimension */
run;
&lt;/PRE&gt;
&lt;P&gt;Output BY statement&lt;BR /&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="nAiTY" style="width: 215px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/48657iE454A01C9D8B27E3/image-size/large?v=v2&amp;amp;px=999" role="button" title="nAiTY" alt="nAiTY" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Output PAGE dimensioned table&lt;BR /&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="NapaU" style="width: 209px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/48658i6F4DF35734BF5115/image-size/large?v=v2&amp;amp;px=999" role="button" title="NapaU" alt="NapaU" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 26 Aug 2020 12:29:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-loop-to-generate-Proc-Tabulate-by-origin/m-p/679422#M205161</guid>
      <dc:creator>RichardDeVen</dc:creator>
      <dc:date>2020-08-26T12:29:10Z</dc:date>
    </item>
    <item>
      <title>Re: Macro loop to generate Proc Tabulate by origin</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-loop-to-generate-Proc-Tabulate-by-origin/m-p/679434#M205165</link>
      <description>&lt;P&gt;Sorry, but I don't understand except putting "&amp;amp;". So, here is my code, with your suggestions. But it still does not work:&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;PRE&gt;%macro comp;
%local i reg;

	%do i=1 %to 3;

		proc sql ;
		select reg_name
		into
		:reg_name 
		from classes
		where id_reg = &amp;amp;i.;
		quit;

		%let reg=input(reg_name,$10);

		PROC TABULATE DATA = data out=tabulate_&amp;amp;i;
		where Origin in (&amp;amp;reg);
		CLASS Make DriveTrain   ; 
		TABLE (Make), (DriveTrain)   / nocellmerge ; 
		run;

	%end;
%mend comp;
%comp&lt;/PRE&gt;</description>
      <pubDate>Wed, 26 Aug 2020 12:57:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-loop-to-generate-Proc-Tabulate-by-origin/m-p/679434#M205165</guid>
      <dc:creator>commitsudoku</dc:creator>
      <dc:date>2020-08-26T12:57:27Z</dc:date>
    </item>
    <item>
      <title>Re: Macro loop to generate Proc Tabulate by origin</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-loop-to-generate-Proc-Tabulate-by-origin/m-p/679442#M205169</link>
      <description>&lt;PRE&gt;%macro comp;
%local i reg;

	%do i=1 %to 3;

		proc sql ;
		select QUOTE(reg_name)
		into
		:reg_name 
		from classes
		where id_reg = &amp;amp;i.;
		quit;

		PROC TABULATE DATA = data out=tabulate_&amp;amp;i;
		where Origin in (&amp;amp;reg_name.);
		CLASS Make DriveTrain   ; 
		TABLE (Make), (DriveTrain)   / nocellmerge ; 
		run;

	%end;
%mend comp;
%comp&lt;/PRE&gt;</description>
      <pubDate>Wed, 26 Aug 2020 13:10:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-loop-to-generate-Proc-Tabulate-by-origin/m-p/679442#M205169</guid>
      <dc:creator>yabwon</dc:creator>
      <dc:date>2020-08-26T13:10:10Z</dc:date>
    </item>
    <item>
      <title>Re: Macro loop to generate Proc Tabulate by origin</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-loop-to-generate-Proc-Tabulate-by-origin/m-p/679453#M205173</link>
      <description>&lt;P&gt;Thanks to all the bits you gave, I think I have found the solution, without using the BY statemen. So here is the code that worked for me. I thank you all very much for your help!&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data data; set sashelp.cars;run;

data classes;
input id_reg reg_name $ ; 
cards;
1 Asia 
2 Europe 
3 USA 
run;

%macro comp;
%local i ;

	%do i=1 %to 3;

		proc sql ;
		select reg_name
		into
		:reg_name 
		from classes
		where id_reg = &amp;amp;i.;
		quit;

		PROC TABULATE DATA = data(where=(Origin="&amp;amp;reg_name")) out=tabulate_&amp;amp;i;
		CLASS Make DriveTrain   ; 
		TABLE (Make), (DriveTrain)   / nocellmerge ; 
		run;

	%end;
%mend comp;
%comp&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 26 Aug 2020 13:26:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-loop-to-generate-Proc-Tabulate-by-origin/m-p/679453#M205173</guid>
      <dc:creator>commitsudoku</dc:creator>
      <dc:date>2020-08-26T13:26:46Z</dc:date>
    </item>
    <item>
      <title>Re: Macro loop to generate Proc Tabulate by origin</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-loop-to-generate-Proc-Tabulate-by-origin/m-p/679511#M205193</link>
      <description>&lt;BLOCKQUOTE&gt;&lt;HR /&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/343293"&gt;@commitsudoku&lt;/a&gt;&amp;nbsp;wrote:&lt;BR /&gt;
&lt;P&gt;Thanks to all the bits you gave, I think I have found the solution, without using the BY statemen. So here is the code that worked for me. I thank you all very much for your help!&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data data; set sashelp.cars;run;

data classes;
input id_reg reg_name $ ; 
cards;
1 Asia 
2 Europe 
3 USA 
run;

%macro comp;
%local i ;

	%do i=1 %to 3;

		proc sql ;
		select reg_name
		into
		:reg_name 
		from classes
		where id_reg = &amp;amp;i.;
		quit;

		PROC TABULATE DATA = data(where=(Origin="&amp;amp;reg_name")) out=tabulate_&amp;amp;i;
		CLASS Make DriveTrain   ; 
		TABLE (Make), (DriveTrain)   / nocellmerge ; 
		run;

	%end;
%mend comp;
%comp&lt;/CODE&gt;&lt;/PRE&gt;
&lt;HR /&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;I still think that &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/31304"&gt;@PeterClemmensen&lt;/a&gt;'s suggestion of using a PAGE expression makes sense. If the purpose of the exercise is to create a data set the information for which page the table is from is in the output data set in the _page_ variable (which doesn't appear in the set if a page dimension is not used).&lt;/P&gt;</description>
      <pubDate>Wed, 26 Aug 2020 14:57:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-loop-to-generate-Proc-Tabulate-by-origin/m-p/679511#M205193</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2020-08-26T14:57:22Z</dc:date>
    </item>
  </channel>
</rss>

