<?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: For loops in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Please-what-is-wrong-with-this-macro-why-cant-I-get-the-data/m-p/135424#M261007</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You can do what you want but the syntax is different (it looks like SAS and not JMP). You might want to have a read of the SAS Macro Language syntax, e.g. the syntax could be:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* define and compile the macro */&lt;/P&gt;&lt;P&gt;%macro xxxx; ...%do i=1 %to 7; ... out=test_&amp;amp;i... %end; ...%mend; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* call the macro */&lt;/P&gt;&lt;P&gt;%xxxx;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 08 Nov 2013 03:07:36 GMT</pubDate>
    <dc:creator>Patrick</dc:creator>
    <dc:date>2013-11-08T03:07:36Z</dc:date>
    <item>
      <title>Please what is wrong with this macro,why cant I get the data data impute_t_&amp;p below</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Please-what-is-wrong-with-this-macro-why-cant-I-get-the-data/m-p/135423#M261006</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV class="body undoreset" id="yui_3_13_0_1_1383878173444_15485" style="padding-top: 12px;"&gt;&lt;DIV id="yiv9626702903"&gt;&lt;DIV id="yui_3_13_0_1_1383878173444_15484"&gt;&lt;DIV id="yui_3_13_0_1_1383878173444_15483" style="background-color: #ffffff; font-family: HelveticaNeue, 'Helvetica Neue', Helvetica, Arial, 'Lucida Grande', sans-serif; font-size: 12pt;"&gt;&lt;DIV id="yui_3_13_0_1_1383878173444_15718"&gt;&lt;P id="yui_3_13_0_1_1383878173444_15729"&gt;&lt;/P&gt;&lt;P&gt;ods html close;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%macro surv(replicates=);&lt;/P&gt;&lt;P&gt;%do p=1 %to &amp;amp;replicates;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data tes_&amp;amp;p;&lt;/P&gt;&lt;P&gt; seed=-1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; alpha1 = 2.50;&lt;/P&gt;&lt;P&gt;&amp;nbsp; beta1 = 2.00;&lt;/P&gt;&lt;P&gt;&amp;nbsp; beta2=4;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do i = 1 to 500;&lt;/P&gt;&lt;P&gt;&amp;nbsp; X=ranbin(0,1,.5);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; lambdaT = 0.025; *baseline hazard;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; lambdaC= .03;&amp;nbsp; *heavy=0.15; *light=0.03;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; er=0+(0.05)*rannor(1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; t = rand("WEIBULL", 0.75, lambdaT);&amp;nbsp; * time of event;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; c1 = rand("WEIBULL", 1.25, lambdaC) ;* time of censoring;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; c2= rand("WEIBULL", 1.50, lambdaC) ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if er le 0.240482 then c=c1; else c=c1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; time = min(t, c);&amp;nbsp;&amp;nbsp;&amp;nbsp; * which came first?;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; censored = (c lt t);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; obs=(t lt c); * creating observation vaiable from censored when observeed obs=1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; obs = (t lt c);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; y= alpha1 + beta1*t + er;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&amp;nbsp; t le 0.015072 then R=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if&amp;nbsp; t gt 0.015072 then R=1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; y1= alpha1 +beta1*R + er;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%do i=1 %to 7;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc surveyselect data=tes_&amp;amp;i&amp;nbsp; method = urs sampsize = 10 OUTHITS&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; reps=1 seed=123410 out=test_&amp;amp;i;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc means data = test_&amp;amp;i sum;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;where obs = 0;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;var censored;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;ods output summary = summary_&amp;amp;i;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;data impute_t_&amp;amp;p;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;set summary_1 -summary_&amp;amp;i;;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%mend surv;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%surv(replicates=10);&lt;/P&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 08 Nov 2013 02:47:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Please-what-is-wrong-with-this-macro-why-cant-I-get-the-data/m-p/135423#M261006</guid>
      <dc:creator>desireatem</dc:creator>
      <dc:date>2013-11-08T02:47:48Z</dc:date>
    </item>
    <item>
      <title>Re: For loops</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Please-what-is-wrong-with-this-macro-why-cant-I-get-the-data/m-p/135424#M261007</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You can do what you want but the syntax is different (it looks like SAS and not JMP). You might want to have a read of the SAS Macro Language syntax, e.g. the syntax could be:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* define and compile the macro */&lt;/P&gt;&lt;P&gt;%macro xxxx; ...%do i=1 %to 7; ... out=test_&amp;amp;i... %end; ...%mend; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/* call the macro */&lt;/P&gt;&lt;P&gt;%xxxx;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 08 Nov 2013 03:07:36 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Please-what-is-wrong-with-this-macro-why-cant-I-get-the-data/m-p/135424#M261007</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2013-11-08T03:07:36Z</dc:date>
    </item>
    <item>
      <title>Re: For loops</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Please-what-is-wrong-with-this-macro-why-cant-I-get-the-data/m-p/135425#M261008</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;So I can have a macro within a macro?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 08 Nov 2013 04:05:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Please-what-is-wrong-with-this-macro-why-cant-I-get-the-data/m-p/135425#M261008</guid>
      <dc:creator>desireatem</dc:creator>
      <dc:date>2013-11-08T04:05:11Z</dc:date>
    </item>
    <item>
      <title>Re: For loops</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Please-what-is-wrong-with-this-macro-why-cant-I-get-the-data/m-p/135426#M261009</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;STRONG&gt;THis is how my code looks like;, is this format correct, why is it that I cant get the data impute_t_&amp;amp;p&lt;BR /&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;ods html close;&lt;/P&gt;&lt;P&gt;%macro surv(replicates=);&lt;/P&gt;&lt;P&gt;%do p=1 %to &amp;amp;replicates;&lt;/P&gt;&lt;P&gt;data tes_&amp;amp;p;&lt;/P&gt;&lt;P&gt; seed=-1;&lt;/P&gt;&lt;P&gt;&amp;nbsp; alpha1 = 2.50;&lt;/P&gt;&lt;P&gt;&amp;nbsp; beta1 = 2.00;&lt;/P&gt;&lt;P&gt;&amp;nbsp; beta2=4;&lt;/P&gt;&lt;P&gt;&amp;nbsp; do i = 1 to 500;&lt;/P&gt;&lt;P&gt;&amp;nbsp; X=ranbin(0,1,.5);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; lambdaT = 0.025; *baseline hazard;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; lambdaC= .03;&amp;nbsp; *heavy=0.15; *light=0.03;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; er=0+(0.05)*rannor(1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; t = rand("WEIBULL", 0.75, lambdaT);&amp;nbsp; * time of event;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; c1 = rand("WEIBULL", 1.25, lambdaC) ;* time of censoring;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; c2= rand("WEIBULL", 1.50, lambdaC) ;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if er le 0.240482 then c=c1; else c=c1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; time = min(t, c);&amp;nbsp;&amp;nbsp;&amp;nbsp; * which came first?;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; censored = (c lt t);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; obs=(t lt c); * creating observation vaiable from censored when observeed obs=1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; obs = (t lt c);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; y= alpha1 + beta1*t + er;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&amp;nbsp; t le 0.015072 then R=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else if&amp;nbsp; t gt 0.015072 then R=1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; y1= alpha1 +beta1*R + er;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%do i=1 %to 7;&lt;/P&gt;&lt;P&gt;proc surveyselect data=tes_&amp;amp;i&amp;nbsp; method = urs sampsize = 10 OUTHITS&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; reps=1 seed=123410 out=test_&amp;amp;i;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;proc means data = test_&amp;amp;i sum;&lt;/P&gt;&lt;P&gt;where obs = 0;&lt;/P&gt;&lt;P&gt;var censored;&amp;nbsp; &lt;/P&gt;&lt;P&gt;ods output summary = summary_&amp;amp;i;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;%end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;data impute_t_&amp;amp;p;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;set summary_1 -summary_&amp;amp;i;;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;%end;&lt;/P&gt;&lt;P&gt;%mend surv;&lt;/P&gt;&lt;P&gt;%surv(replicates=10);&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 08 Nov 2013 04:46:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Please-what-is-wrong-with-this-macro-why-cant-I-get-the-data/m-p/135426#M261009</guid>
      <dc:creator>desireatem</dc:creator>
      <dc:date>2013-11-08T04:46:21Z</dc:date>
    </item>
    <item>
      <title>Re: For loops</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Please-what-is-wrong-with-this-macro-why-cant-I-get-the-data/m-p/135427#M261010</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;You can define a macro within a macro but if you want to use the macro then you need to call it. So you would need to add %selecting; to your code.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You normally avoid to define a macro in a macro because in doing so the inner macro definition gets re-compiled for every call of the out macro. So what you would do if such a nesting is required is a construct like:&lt;/P&gt;&lt;P&gt;%macro inner;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; ....&lt;/P&gt;&lt;P&gt;%mend;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%macro outer;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; %inner;&lt;/P&gt;&lt;P&gt;%mend;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%outer;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Also don't forget that macro variables defined within a macro have per default a scope of local. So &amp;amp;i defined in macro %selecting is not available in the outer macro %surv. You need to use a %global i; in your inner macro to change this.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I also believe that at the end of a %do loop the value of &amp;amp;i is the upper boundary of the loop plus 1 - so "summary_&amp;amp;i;" would expect a data set "summary_8" - which doesn't exist.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I actually don't understand why you need macro %selecting at all. Can't you just have your %do loop as part of macro %surv?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Another option to collect data created iteratively would be:&lt;/P&gt;&lt;P&gt;proc append base=impute_t_&amp;amp;p data=summary_&amp;amp;i;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You would have this proc append step inside your do loop. If you don't need to keep a table per iteration then you could also overwrite the summary_.. table in each operation and so using syntax like:&lt;/P&gt;&lt;P&gt;proc append base=impute_t_&amp;amp;p data=summary;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Haven't really looked at the rest of the code. What you normally want to do is make your program work without a macro (so only for a single case) and only once this is working "macrotize" it.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Also: It's most of the times better to use by-group processing instead of calling a procedure multiple times with different data slices. So eventually you could combine the output from proc sureveyselect using proc append but then call proc means only once.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 08 Nov 2013 05:37:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Please-what-is-wrong-with-this-macro-why-cant-I-get-the-data/m-p/135427#M261010</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2013-11-08T05:37:48Z</dc:date>
    </item>
  </channel>
</rss>

