<?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 Proc means in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Macro-Proc-means/m-p/639449#M190252</link>
    <description>&lt;P&gt;The code I posted already did that.&amp;nbsp; Try it.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  do time_count=1 to 5;
    output;
  end;
run;

data want;
  set have;
  do t=time_count to 5;
    output;
  end;
run;

proc sort;
  by t time_count;
run;

proc freq;
 tables time_count;
run;

proc print;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;PRE&gt;                                       Cumulative    Cumulative
time_count    Frequency     Percent     Frequency      Percent

         1           5       33.33             5        33.33
         2           4       26.67             9        60.00
         3           3       20.00            12        80.00
         4           2       13.33            14        93.33
         5           1        6.67            15       100.00

       time_
Obs    count    t

  1      1      1
  2      1      2
  3      2      2
  4      1      3
  5      2      3
  6      3      3
  7      1      4
  8      2      4
  9      3      4
 10      4      4
 11      1      5
 12      2      5
 13      3      5
 14      4      5
 15      5      5
&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Mon, 13 Apr 2020 13:02:44 GMT</pubDate>
    <dc:creator>Tom</dc:creator>
    <dc:date>2020-04-13T13:02:44Z</dc:date>
    <item>
      <title>Macro Proc means</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-Proc-means/m-p/639299#M190156</link>
      <description>&lt;P&gt;I have this piece of code. However, the Macro in proc univariate generate too many separate dataset due to loop t from 1 to 310. How can I modify this code to include all proc univariate output into one dataset and then modify the rest of the code for a more efficient run?&lt;/P&gt;&lt;P&gt;%let L=10; %* 10th percentile *;&lt;BR /&gt;%let H=%eval(100 - &amp;amp;L); %* 90th percentile*;&lt;BR /&gt;%let wlo=V1&amp;amp;L V2&amp;amp;L V3&amp;amp;L&amp;nbsp;;&lt;BR /&gt;%let whi=V1&amp;amp;H V2&amp;amp;H V3&amp;amp;H ;&lt;BR /&gt;%let wval=wV1 wV2 wV3 ;&lt;BR /&gt;%let val=V1 V2 V3;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;%macro winsorise();&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;%do v=1 %to %sysfunc(countw(&amp;amp;val));&lt;BR /&gt;%do t=1 %to 310;&lt;BR /&gt;proc univariate data=regressors noprint;&lt;BR /&gt;var &amp;amp;val;&lt;BR /&gt;output out=_winsor&amp;amp;t._V&amp;amp;v pctlpts=&amp;amp;H &amp;amp;L&lt;BR /&gt;prtlpre=&amp;amp;val&amp;amp;t._V&amp;amp;v;&lt;BR /&gt;where time_count&amp;lt;=&amp;amp;t;run;&lt;BR /&gt;%end;&lt;BR /&gt;data regressors (drop=__:);&lt;BR /&gt;set regressors;&lt;BR /&gt;if _n_=1 then set _winsor&amp;amp;t._V&amp;amp;v;&lt;BR /&gt;&amp;amp;wval&amp;amp;t._V&amp;amp;v=min(max(&amp;amp;val&amp;amp;t._V&amp;amp;v,&amp;amp;wlo&amp;amp;t._V&amp;amp;v),&amp;amp;whi&amp;amp;t._V&amp;amp;v);&lt;BR /&gt;run;&lt;BR /&gt;%end;&lt;BR /&gt;%mend;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you.&lt;/P&gt;</description>
      <pubDate>Sun, 12 Apr 2020 11:54:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-Proc-means/m-p/639299#M190156</guid>
      <dc:creator>Baolinhdo</dc:creator>
      <dc:date>2020-04-12T11:54:16Z</dc:date>
    </item>
    <item>
      <title>Re: Macro Proc means</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-Proc-means/m-p/639301#M190158</link>
      <description>&lt;P&gt;Why do you need a macro at all?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Why don't you just put all the variables in one VAR statement in one PROC UNIVARIATE? This produces one output data set.&lt;/P&gt;</description>
      <pubDate>Sun, 12 Apr 2020 11:56:51 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-Proc-means/m-p/639301#M190158</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2020-04-12T11:56:51Z</dc:date>
    </item>
    <item>
      <title>Re: Macro Proc means</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-Proc-means/m-p/639306#M190163</link>
      <description>I have VAR in proc univariate already, but due to loop in t from 1 to 310, I have 310 output datasets, each with one observation of percentiles for 3 variables (in column).Something like this:&lt;BR /&gt;Type V1_p5 V2_p5 V3_p5&lt;BR /&gt;0 0.05. 0.06. 0.05.&lt;BR /&gt;&lt;BR /&gt;(my data is panel data with 3 variables, 310 months and many cross-sectional observation in each month)</description>
      <pubDate>Sun, 12 Apr 2020 12:07:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-Proc-means/m-p/639306#M190163</guid>
      <dc:creator>Baolinhdo</dc:creator>
      <dc:date>2020-04-12T12:07:41Z</dc:date>
    </item>
    <item>
      <title>Re: Macro Proc means</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-Proc-means/m-p/639352#M190197</link>
      <description>&lt;P&gt;Before you start worrying about writing a macro to generate code you need to figure out what actual code you want to generate.&amp;nbsp; Sounds like you are trying to replicate values into multiple separate analyses.&amp;nbsp; So just use multiple OUTPUT statements.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data groups;
  set regressors;
  do t=time_count to 310 ;
     output;
  en;
run;

proc univariate data=regressors noprint;
  class t;
  var v1;
  output out=winsor_v1 pctlpts=90 10 prtlpre=v1_;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 12 Apr 2020 19:14:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-Proc-means/m-p/639352#M190197</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2020-04-12T19:14:22Z</dc:date>
    </item>
    <item>
      <title>Re: Macro Proc means</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-Proc-means/m-p/639437#M190249</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;Thanks for your reply. I tried it and it is not what I want. However, this might work if I can make a new dataset that contain 310 replicated observation for t=1, 309 replicated observation for t=2; 308 replicated observation for t=3,etc.&lt;/P&gt;&lt;P&gt;something like this. Can you suggest how to modify your code to achieve this?&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;&lt;/CODE&gt;&lt;/PRE&gt;&lt;PRE&gt;Obs       t          group
1           1            1
2           1            2
3           2            2
4           1            3
5           2            3
6           3            3&lt;/PRE&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Mon, 13 Apr 2020 11:24:48 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-Proc-means/m-p/639437#M190249</guid>
      <dc:creator>Baolinhdo</dc:creator>
      <dc:date>2020-04-13T11:24:48Z</dc:date>
    </item>
    <item>
      <title>Re: Macro Proc means</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-Proc-means/m-p/639449#M190252</link>
      <description>&lt;P&gt;The code I posted already did that.&amp;nbsp; Try it.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
  do time_count=1 to 5;
    output;
  end;
run;

data want;
  set have;
  do t=time_count to 5;
    output;
  end;
run;

proc sort;
  by t time_count;
run;

proc freq;
 tables time_count;
run;

proc print;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;PRE&gt;                                       Cumulative    Cumulative
time_count    Frequency     Percent     Frequency      Percent

         1           5       33.33             5        33.33
         2           4       26.67             9        60.00
         3           3       20.00            12        80.00
         4           2       13.33            14        93.33
         5           1        6.67            15       100.00

       time_
Obs    count    t

  1      1      1
  2      1      2
  3      2      2
  4      1      3
  5      2      3
  6      3      3
  7      1      4
  8      2      4
  9      3      4
 10      4      4
 11      1      5
 12      2      5
 13      3      5
 14      4      5
 15      5      5
&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 13 Apr 2020 13:02:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-Proc-means/m-p/639449#M190252</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2020-04-13T13:02:44Z</dc:date>
    </item>
    <item>
      <title>Re: Macro Proc means</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-Proc-means/m-p/639638#M190324</link>
      <description>&lt;P&gt;Thank you for your reply. However, I realise that my dataset is panel data, for each time_count, I have thousands of cross-sectional observations. So when I stack the time_count in the same dataset, SAS cannot process the explosive number of observations.&amp;nbsp;&lt;/P&gt;&lt;P&gt;I will keep in mind your approach before I do any complicated macro.&lt;/P&gt;</description>
      <pubDate>Tue, 14 Apr 2020 03:25:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-Proc-means/m-p/639638#M190324</guid>
      <dc:creator>Baolinhdo</dc:creator>
      <dc:date>2020-04-14T03:25:39Z</dc:date>
    </item>
  </channel>
</rss>

