<?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 How do I apply a macro program repeatedly? in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-apply-a-macro-program-repeatedly/m-p/407244#M99218</link>
    <description>&lt;P&gt;I am using this macro to generate means, frequencies, and percentages for a number of survey questions/items. Each survey question gets its own dataset and all response options (0, 1, or 2) get their own dummy variable within each dataset.&amp;nbsp;Right now I apply the macro to each survey question (A1, B1, B2_1,...H9) individually (see code at the bottom). If there are 100 survey questions that would result in 100 repetitions. How&amp;nbsp;could I&amp;nbsp;apply the macro repeatedly in a simpler/more efficient way?&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;%macro calc(var);&lt;/P&gt;&lt;P&gt;data &amp;amp;var. (keep=&amp;amp;var. v2 v1 v0);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set tbl ;&lt;/P&gt;&lt;P&gt;v2=0 ; v1=0 ; v0=0 ;&lt;BR /&gt;if &amp;amp;var.=0 then v0=1 ;&lt;BR /&gt;else if &amp;amp;var.=1 then v1=1 ;&lt;BR /&gt;else if &amp;amp;var.=2 then v2=1 ;&lt;BR /&gt;else if &amp;amp;var.=. then do ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v2=. ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v1=. ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v0=. ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end ;&lt;/P&gt;&lt;P&gt;run ;&lt;/P&gt;&lt;P&gt;proc summary data=&amp;amp;var.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var &amp;amp;var. v2 v1 v0 ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output out=&amp;amp;var.x (keep= &amp;amp;var. v2 v1 v0 N sum)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mean= &amp;amp;var. v2 v1 v0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; N=N&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sum=sum ;;&lt;BR /&gt;run ;&lt;/P&gt;&lt;P&gt;%mend calc ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;%calc(A1);&lt;/P&gt;&lt;P&gt;%calc(B1);&lt;/P&gt;&lt;P&gt;%calc(B2_1);&lt;/P&gt;&lt;P&gt;etc.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;</description>
    <pubDate>Wed, 25 Oct 2017 13:09:48 GMT</pubDate>
    <dc:creator>mh</dc:creator>
    <dc:date>2017-10-25T13:09:48Z</dc:date>
    <item>
      <title>How do I apply a macro program repeatedly?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-apply-a-macro-program-repeatedly/m-p/407244#M99218</link>
      <description>&lt;P&gt;I am using this macro to generate means, frequencies, and percentages for a number of survey questions/items. Each survey question gets its own dataset and all response options (0, 1, or 2) get their own dummy variable within each dataset.&amp;nbsp;Right now I apply the macro to each survey question (A1, B1, B2_1,...H9) individually (see code at the bottom). If there are 100 survey questions that would result in 100 repetitions. How&amp;nbsp;could I&amp;nbsp;apply the macro repeatedly in a simpler/more efficient way?&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;%macro calc(var);&lt;/P&gt;&lt;P&gt;data &amp;amp;var. (keep=&amp;amp;var. v2 v1 v0);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set tbl ;&lt;/P&gt;&lt;P&gt;v2=0 ; v1=0 ; v0=0 ;&lt;BR /&gt;if &amp;amp;var.=0 then v0=1 ;&lt;BR /&gt;else if &amp;amp;var.=1 then v1=1 ;&lt;BR /&gt;else if &amp;amp;var.=2 then v2=1 ;&lt;BR /&gt;else if &amp;amp;var.=. then do ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v2=. ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v1=. ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; v0=. ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end ;&lt;/P&gt;&lt;P&gt;run ;&lt;/P&gt;&lt;P&gt;proc summary data=&amp;amp;var.;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var &amp;amp;var. v2 v1 v0 ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output out=&amp;amp;var.x (keep= &amp;amp;var. v2 v1 v0 N sum)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mean= &amp;amp;var. v2 v1 v0&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; N=N&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sum=sum ;;&lt;BR /&gt;run ;&lt;/P&gt;&lt;P&gt;%mend calc ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;%calc(A1);&lt;/P&gt;&lt;P&gt;%calc(B1);&lt;/P&gt;&lt;P&gt;%calc(B2_1);&lt;/P&gt;&lt;P&gt;etc.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;</description>
      <pubDate>Wed, 25 Oct 2017 13:09:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-apply-a-macro-program-repeatedly/m-p/407244#M99218</guid>
      <dc:creator>mh</dc:creator>
      <dc:date>2017-10-25T13:09:48Z</dc:date>
    </item>
    <item>
      <title>Re: How do I apply a macro program repeatedly?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-apply-a-macro-program-repeatedly/m-p/407251#M99219</link>
      <description>&lt;P&gt;Check out this resource.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="http://myweb.uiowa.edu/pbreheny/misc/macros.pdf" target="_blank"&gt;http://myweb.uiowa.edu/pbreheny/misc/macros.pdf&lt;/A&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 25 Oct 2017 13:24:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-apply-a-macro-program-repeatedly/m-p/407251#M99219</guid>
      <dc:creator>Sammi_Kerti</dc:creator>
      <dc:date>2017-10-25T13:24:53Z</dc:date>
    </item>
    <item>
      <title>Re: How do I apply a macro program repeatedly?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-apply-a-macro-program-repeatedly/m-p/407252#M99220</link>
      <description>&lt;P&gt;Here is an example of a macro that calls proc code one time for each variable in the data set.&amp;nbsp; You could adapt it for your purposes.&amp;nbsp; There are many other ways to attack this.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc contents data=sashelp.class out=name noprint; run;

data _null_; set name nobs=n; call symputx('n', n); stop; run;

%macro loop;
   %do i = 1 %to &amp;amp;n;
      data _null_; i = &amp;amp;i; set name point=i; call symputx('var', name); stop; run;
      proc print data=sashelp.class;
         var &amp;amp;var;
      run;
   %end;
%mend;
%loop   &lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 25 Oct 2017 13:23:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-apply-a-macro-program-repeatedly/m-p/407252#M99220</guid>
      <dc:creator>WarrenKuhfeld</dc:creator>
      <dc:date>2017-10-25T13:23:49Z</dc:date>
    </item>
    <item>
      <title>Re: How do I apply a macro program repeatedly?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-apply-a-macro-program-repeatedly/m-p/407271#M99224</link>
      <description>&lt;P&gt;Or you could use Base SAS:&lt;/P&gt;
&lt;PRE&gt;data tbl;
  a1=1; b1=0; b2_1=2; row=1; output;
  a1=2; b1=1; b2_1=1; row=2; output;
run;
proc transpose data=tbl out=inter;
  by row;
  var a1--b2_1;
run;
proc sort data=inter;
  by _name_;
run;
data inter;
  set inter;
  v0=ifn(col1=0,1,0);
  v1=ifn(col1=1,1,0);
  v2=ifn(col1=2,1,0);
run;
proc summary data=inter;
  by _name_;
  var col1 v2 v1 v0;
  output out=want (keep=_name_ col1 v2 v1 v0 N sum)
          mean=col1 v2 v1 v0
          N=N
          sum=sum;
run;&lt;/PRE&gt;</description>
      <pubDate>Wed, 25 Oct 2017 13:49:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-apply-a-macro-program-repeatedly/m-p/407271#M99224</guid>
      <dc:creator>RW9</dc:creator>
      <dc:date>2017-10-25T13:49:29Z</dc:date>
    </item>
    <item>
      <title>Re: How do I apply a macro program repeatedly?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/How-do-I-apply-a-macro-program-repeatedly/m-p/407325#M99248</link>
      <description>&lt;P&gt;here is an scl solution&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;you'll need to modify your macro parameters to use this&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;but otherwise, it can be used to call any macro for every variable in a data set.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;options mprint source2;
*include 'freqhilo.sas';
%let libname = sashelp;
%let memname = class;
%let macro_name = mymacro;
%let macro_name = echo;

%macro echo(libname=,memname=,name=,type=,length=,varnum=);
%put _local_;
%mend;
*echo(libname=1,memname=2,name=3,type=4,length=5,varnum=6);
*endsas;
%let _dsid   = %sysfunc(open (&amp;amp;libname..&amp;amp;memname,i));
%let _n_obs  = %sysfunc(attrn(&amp;amp;_dsid,nobs));
%let _n_vars = %sysfunc(attrn(&amp;amp;_dsid,nvar));
%let _rc     = %sysfunc(close(&amp;amp;_dsid));
%put echo &amp;amp;=_n_obs &amp;amp;=_n_vars;
DATA _null_;
     attrib name   length = $32
            type   length = $1
            length length = 8
            statement length = $128;
_dsid = open("&amp;amp;libname..&amp;amp;memname");

do varnum = 1 to &amp;amp;_n_vars;
   name   =         varname  (_dsid,varnum) ;
   type   = lowcase(vartype  (_dsid,varnum));
   length =         varlength(_dsid,varnum);
   statement = catt
   ('%',"&amp;amp;macro_name"
      ,'(name='  ,name
      ,',type='  ,type
      ,',length=',length
      ,',varnum=',varnum
      ,",libname=&amp;amp;libname,memname=&amp;amp;memname)"
   );
   put statement;
   call execute(catt('%nrstr(',statement,')'));
   end;
_rc = close(_dsid);

run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Ron Fehd&lt;/P&gt;&lt;P&gt;this program is based on my SESUG.2017 paper&lt;/P&gt;&lt;P&gt;Advanced Programming Concepts&lt;/P&gt;&lt;P&gt;Cardinality Ratios and Types&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;code in the paper will be available after Nov 4.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="http://www.sascommunity.org/wiki/Cardinality_Ratios_and_Types" target="_blank"&gt;http://www.sascommunity.org/wiki/Cardinality_Ratios_and_Types&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 25 Oct 2017 16:01:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/How-do-I-apply-a-macro-program-repeatedly/m-p/407325#M99248</guid>
      <dc:creator>Ron_MacroMaven</dc:creator>
      <dc:date>2017-10-25T16:01:00Z</dc:date>
    </item>
  </channel>
</rss>

