<?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: Calculating means based on percentiles in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Calculating-means-based-on-percentiles/m-p/97281#M20532</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This solution uses the array suggested by ArtT, but loops through the array rather than sorting the array, which would be more elegant.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;BR /&gt;input date date9. corr1_2 corr1_3 corr2_3;&lt;BR /&gt;datalines;&lt;BR /&gt;16oct2012 .1 .9 .2&lt;BR /&gt;17oct2012 .5 .7 .3&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;data want;*(keep=date meancorr umean lmean);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; set have;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; array allcorr {*} corr:;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; meancorr = mean(of corr:);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; lower=pctl(5,of corr:);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; upper=pctl(95,of corr:);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp; lmean=0; lcnt=0; umean=0; ucnt=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; do i = 1 to dim(allcorr);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if allcorr{i} le lower then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lmean + allcorr{i};&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lcnt + 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if allcorr{i} ge upper then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; umean + allcorr{i};&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ucnt + 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lmean=lmean/lcnt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; umean=umean/ucnt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; output want; &lt;BR /&gt;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;proc print data=want;&lt;BR /&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 18 Oct 2012 06:39:14 GMT</pubDate>
    <dc:creator>ArtC</dc:creator>
    <dc:date>2012-10-18T06:39:14Z</dc:date>
    <item>
      <title>Calculating means based on percentiles</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-means-based-on-percentiles/m-p/97279#M20530</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Dear SAS Users,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have data as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;date corr1_2 corr1_3..... corr19_20&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;for each date, the variable corr1_2&amp;nbsp; shows the correlation between item1 and item2, ..., corr19_20 shows the correlation between item19 and item20. I have all combinations of pairwise correlations for different dates.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have macro variables that holds 18,19 and 20 (end numbers). I calculated mean correlation for each day by using a line as follows:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;meancorr=mean( %do i=1 %to &amp;amp;lastbmax2; %do j=&amp;amp;i+1 %to &amp;amp;max; corr&amp;amp;i._&amp;amp;j, %end;&amp;nbsp; %end; corr&amp;amp;lastbmax1._&amp;amp;max);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;where lastbmax2, lastbmax1 and max are 18, 19, and 20, respectively.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;My question is that how can I calculate the mean of the bivariate correlations which are lower than the 5th and higher than the 95th percentiles for each day? I can identify the percentiles by using the pctl function. But how can I calculate the means as I just described?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks for any help in advance.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;J.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 17 Oct 2012 13:31:30 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-means-based-on-percentiles/m-p/97279#M20530</guid>
      <dc:creator>JohnK</dc:creator>
      <dc:date>2012-10-17T13:31:30Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating means based on percentiles</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-means-based-on-percentiles/m-p/97280#M20531</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I think you are complicating the task by including all of the correlations in macro variables.&amp;nbsp; If you simply loaded then into an array, in a datastep, you might be able to easily accomplish both tasks by using call sortn to sort the array.&amp;nbsp; Then, you would only have to use the of operator to include all of the correlations in the overall mean calculation and, for the top and bottom percentiles (unless I misunderstand your data), simply include the x percent at the top and bottom of the sorted array.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Wed, 17 Oct 2012 13:58:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-means-based-on-percentiles/m-p/97280#M20531</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-10-17T13:58:03Z</dc:date>
    </item>
    <item>
      <title>Re: Calculating means based on percentiles</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Calculating-means-based-on-percentiles/m-p/97281#M20532</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;This solution uses the array suggested by ArtT, but loops through the array rather than sorting the array, which would be more elegant.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;BR /&gt;input date date9. corr1_2 corr1_3 corr2_3;&lt;BR /&gt;datalines;&lt;BR /&gt;16oct2012 .1 .9 .2&lt;BR /&gt;17oct2012 .5 .7 .3&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;data want;*(keep=date meancorr umean lmean);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; set have;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; array allcorr {*} corr:;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; meancorr = mean(of corr:);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; lower=pctl(5,of corr:);&lt;BR /&gt;&amp;nbsp;&amp;nbsp; upper=pctl(95,of corr:);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp; lmean=0; lcnt=0; umean=0; ucnt=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; do i = 1 to dim(allcorr);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if allcorr{i} le lower then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lmean + allcorr{i};&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lcnt + 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if allcorr{i} ge upper then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; umean + allcorr{i};&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ucnt + 1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lmean=lmean/lcnt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; umean=umean/ucnt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; output want; &lt;BR /&gt;&amp;nbsp;&amp;nbsp; run;&lt;BR /&gt;proc print data=want;&lt;BR /&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 18 Oct 2012 06:39:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Calculating-means-based-on-percentiles/m-p/97281#M20532</guid>
      <dc:creator>ArtC</dc:creator>
      <dc:date>2012-10-18T06:39:14Z</dc:date>
    </item>
  </channel>
</rss>

