<?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 descriptive statistics (quartiles) by hand - an exercise in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/calculating-descriptive-statistics-quartiles-by-hand-an-exercise/m-p/161123#M41979</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;OK, I got something going for those that are newbies and curious like me. The code below does the job, OR just use proc Univariate or something else. &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://communities.sas.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt; Thanks.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA days;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; INPUT days;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DATALINES;&lt;/P&gt;&lt;P&gt;9&lt;/P&gt;&lt;P&gt;13&lt;/P&gt;&lt;P&gt;13&lt;/P&gt;&lt;P&gt;13&lt;/P&gt;&lt;P&gt;14&lt;/P&gt;&lt;P&gt;15&lt;/P&gt;&lt;P&gt;15&lt;/P&gt;&lt;P&gt;15&lt;/P&gt;&lt;P&gt;25&lt;/P&gt;&lt;P&gt;25&lt;/P&gt;&lt;P&gt;25&lt;/P&gt;&lt;P&gt;26&lt;/P&gt;&lt;P&gt;36&lt;/P&gt;&lt;P&gt;36&lt;/P&gt;&lt;P&gt;49&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 sort data = days; by days; run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*identifies the number of observation in a dataset*/&lt;/P&gt;&lt;P&gt;%let dsid=%sysfunc(open(days));&lt;/P&gt;&lt;P&gt;%let num=%sysfunc(attrn(&amp;amp;dsid,nlobs));&lt;/P&gt;&lt;P&gt;%let rc=%sysfunc(close(&amp;amp;dsid));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%put There are &amp;amp;num. observations in dataset days.;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data temp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set days;&lt;/P&gt;&lt;P&gt;q1_pos = ceil((25/100)*&amp;amp;num.);&lt;/P&gt;&lt;P&gt;q2_pos = ceil((50/100)*&amp;amp;num.);&lt;/P&gt;&lt;P&gt;q3_pos = ceil((75/100)*&amp;amp;num.);&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*getting the quartile position into a macro variable*/&lt;/P&gt;&lt;P&gt;data _null_;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set temp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; call symput("q1_pos",q1_pos);&lt;/P&gt;&lt;P&gt;&amp;nbsp; call symput("q2_pos",q2_pos);&lt;/P&gt;&lt;P&gt;&amp;nbsp; call symput("q3_pos",q3_pos);&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%put position of Q1 is &amp;amp;q1_pos.;&lt;/P&gt;&lt;P&gt;%put position of Q2 is &amp;amp;q2_pos.;&lt;/P&gt;&lt;P&gt;%put position of Q3 is &amp;amp;q3_pos.;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*creating 2 datasets for each quartile*/&lt;/P&gt;&lt;P&gt;data Q1 (keep = q1) Q3 (keep = q3);&lt;/P&gt;&lt;P&gt;&amp;nbsp; set temp;&lt;/P&gt;&lt;P&gt;if _N_ in(&amp;amp;q1_pos.) then do;&lt;/P&gt;&lt;P&gt;Q1= days;&lt;/P&gt;&lt;P&gt;output Q1;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;if _N_ in(&amp;amp;q3_pos.) then do;&lt;/P&gt;&lt;P&gt;Q3= days;&lt;/P&gt;&lt;P&gt;output Q3;&lt;/P&gt;&lt;P&gt;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;/*Calculating the interquartile range, and upper and lower bounds for outliers*/&lt;/P&gt;&lt;P&gt;data iqr;&lt;/P&gt;&lt;P&gt;set q1;&lt;/P&gt;&lt;P&gt;set q3;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;IQR = q3-q1;&lt;/P&gt;&lt;P&gt;LL = q1 - 1.5*IQR;&lt;/P&gt;&lt;P&gt;UL = q3 + 1.5*IQR;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 03 Feb 2014 23:32:52 GMT</pubDate>
    <dc:creator>avbraga</dc:creator>
    <dc:date>2014-02-03T23:32:52Z</dc:date>
    <item>
      <title>calculating descriptive statistics (quartiles) by hand - an exercise</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/calculating-descriptive-statistics-quartiles-by-hand-an-exercise/m-p/161122#M41978</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;So I am reviewing some basic stats concepts but as opposed to using a procedure or Excel, I would like to get some sas programming practice and actually program them by scratch. At the moment I am struggling with the following: I have calculated the position for quartiles Q1, Q2 and Q3. How can I now now use this value to actually pick the observation in the dataset days? &lt;/P&gt;&lt;P&gt;Your help would be greatly appreciated it. Thanks.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;******;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA days; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; INPUT days; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DATALINES; &lt;/P&gt;&lt;P&gt; 9&lt;/P&gt;&lt;P&gt; 13&lt;/P&gt;&lt;P&gt; 13&lt;/P&gt;&lt;P&gt; 13&lt;/P&gt;&lt;P&gt; 14&lt;/P&gt;&lt;P&gt; 15&lt;/P&gt;&lt;P&gt; 15&lt;/P&gt;&lt;P&gt; 15&lt;/P&gt;&lt;P&gt; 25&lt;/P&gt;&lt;P&gt; 25&lt;/P&gt;&lt;P&gt; 25&lt;/P&gt;&lt;P&gt; 26&lt;/P&gt;&lt;P&gt; 36&lt;/P&gt;&lt;P&gt; 36&lt;/P&gt;&lt;P&gt; 49&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 sort data = days; run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*identifies the number of observation in a dataset*/&lt;/P&gt;&lt;P&gt;%let dsid=%sysfunc(open(days));&lt;/P&gt;&lt;P&gt;%let num=%sysfunc(attrn(&amp;amp;dsid,nlobs));&lt;/P&gt;&lt;P&gt;%let rc=%sysfunc(close(&amp;amp;dsid));&lt;/P&gt;&lt;P&gt;%put There are &amp;amp;num. observations in dataset days.;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data temp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set days;&lt;/P&gt;&lt;P&gt;q1_pos = ceil((25/100)*&amp;amp;num.);&lt;/P&gt;&lt;P&gt;q2_pos = ceil((50/100)*&amp;amp;num.);&lt;/P&gt;&lt;P&gt;q3_pos = ceil((75/100)*&amp;amp;num.);&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 03 Feb 2014 22:56:43 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/calculating-descriptive-statistics-quartiles-by-hand-an-exercise/m-p/161122#M41978</guid>
      <dc:creator>avbraga</dc:creator>
      <dc:date>2014-02-03T22:56:43Z</dc:date>
    </item>
    <item>
      <title>Re: calculating descriptive statistics (quartiles) by hand - an exercise</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/calculating-descriptive-statistics-quartiles-by-hand-an-exercise/m-p/161123#M41979</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;OK, I got something going for those that are newbies and curious like me. The code below does the job, OR just use proc Univariate or something else. &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://communities.sas.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt; Thanks.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;DATA days;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; INPUT days;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; DATALINES;&lt;/P&gt;&lt;P&gt;9&lt;/P&gt;&lt;P&gt;13&lt;/P&gt;&lt;P&gt;13&lt;/P&gt;&lt;P&gt;13&lt;/P&gt;&lt;P&gt;14&lt;/P&gt;&lt;P&gt;15&lt;/P&gt;&lt;P&gt;15&lt;/P&gt;&lt;P&gt;15&lt;/P&gt;&lt;P&gt;25&lt;/P&gt;&lt;P&gt;25&lt;/P&gt;&lt;P&gt;25&lt;/P&gt;&lt;P&gt;26&lt;/P&gt;&lt;P&gt;36&lt;/P&gt;&lt;P&gt;36&lt;/P&gt;&lt;P&gt;49&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 sort data = days; by days; run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*identifies the number of observation in a dataset*/&lt;/P&gt;&lt;P&gt;%let dsid=%sysfunc(open(days));&lt;/P&gt;&lt;P&gt;%let num=%sysfunc(attrn(&amp;amp;dsid,nlobs));&lt;/P&gt;&lt;P&gt;%let rc=%sysfunc(close(&amp;amp;dsid));&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%put There are &amp;amp;num. observations in dataset days.;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data temp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set days;&lt;/P&gt;&lt;P&gt;q1_pos = ceil((25/100)*&amp;amp;num.);&lt;/P&gt;&lt;P&gt;q2_pos = ceil((50/100)*&amp;amp;num.);&lt;/P&gt;&lt;P&gt;q3_pos = ceil((75/100)*&amp;amp;num.);&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*getting the quartile position into a macro variable*/&lt;/P&gt;&lt;P&gt;data _null_;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set temp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; call symput("q1_pos",q1_pos);&lt;/P&gt;&lt;P&gt;&amp;nbsp; call symput("q2_pos",q2_pos);&lt;/P&gt;&lt;P&gt;&amp;nbsp; call symput("q3_pos",q3_pos);&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%put position of Q1 is &amp;amp;q1_pos.;&lt;/P&gt;&lt;P&gt;%put position of Q2 is &amp;amp;q2_pos.;&lt;/P&gt;&lt;P&gt;%put position of Q3 is &amp;amp;q3_pos.;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*creating 2 datasets for each quartile*/&lt;/P&gt;&lt;P&gt;data Q1 (keep = q1) Q3 (keep = q3);&lt;/P&gt;&lt;P&gt;&amp;nbsp; set temp;&lt;/P&gt;&lt;P&gt;if _N_ in(&amp;amp;q1_pos.) then do;&lt;/P&gt;&lt;P&gt;Q1= days;&lt;/P&gt;&lt;P&gt;output Q1;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;if _N_ in(&amp;amp;q3_pos.) then do;&lt;/P&gt;&lt;P&gt;Q3= days;&lt;/P&gt;&lt;P&gt;output Q3;&lt;/P&gt;&lt;P&gt;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;/*Calculating the interquartile range, and upper and lower bounds for outliers*/&lt;/P&gt;&lt;P&gt;data iqr;&lt;/P&gt;&lt;P&gt;set q1;&lt;/P&gt;&lt;P&gt;set q3;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;IQR = q3-q1;&lt;/P&gt;&lt;P&gt;LL = q1 - 1.5*IQR;&lt;/P&gt;&lt;P&gt;UL = q3 + 1.5*IQR;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 03 Feb 2014 23:32:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/calculating-descriptive-statistics-quartiles-by-hand-an-exercise/m-p/161123#M41979</guid>
      <dc:creator>avbraga</dc:creator>
      <dc:date>2014-02-03T23:32:52Z</dc:date>
    </item>
    <item>
      <title>Re: calculating descriptive statistics (quartiles) by hand - an exercise</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/calculating-descriptive-statistics-quartiles-by-hand-an-exercise/m-p/161124#M41980</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Even though you've indicated that you have found your correct answer, and I'm not really sure what you are trying to accomplish, I don't think that your code will work.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You call a proc sort with no by variable, thus it won't be having any effect.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I think you are trying to accomplish something like the following:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sort data = days;&lt;/P&gt;&lt;P&gt;&amp;nbsp; by days;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;/*identifies the number of observation in a dataset*/&lt;/P&gt;&lt;P&gt;%let dsid=%sysfunc(open(days));&lt;/P&gt;&lt;P&gt;%let num=%sysfunc(attrn(&amp;amp;dsid,nlobs));&lt;/P&gt;&lt;P&gt;%let rc=%sysfunc(close(&amp;amp;dsid));&lt;/P&gt;&lt;P&gt;%put There are &amp;amp;num. observations in dataset days.;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data temp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; set days;&lt;/P&gt;&lt;P&gt;&amp;nbsp; quartile=ifn(_n_ le ceil((25/100)*&amp;amp;num.),1,&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; ifn(_n_ le ceil((50/100)*&amp;amp;num.),2,&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; ifn(_n_ le ceil((75/100)*&amp;amp;num.),3,&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; 4)));&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 03 Feb 2014 23:41:39 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/calculating-descriptive-statistics-quartiles-by-hand-an-exercise/m-p/161124#M41980</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2014-02-03T23:41:39Z</dc:date>
    </item>
    <item>
      <title>Re: calculating descriptive statistics (quartiles) by hand - an exercise</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/calculating-descriptive-statistics-quartiles-by-hand-an-exercise/m-p/161125#M41981</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Good catch, Arthur. The proc sort passed without the by statement (which I forgot) because the data was already sorted. My simple code does what I want. But so does yours in a much more elegant way! Thanks Arthur.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 03 Feb 2014 23:50:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/calculating-descriptive-statistics-quartiles-by-hand-an-exercise/m-p/161125#M41981</guid>
      <dc:creator>avbraga</dc:creator>
      <dc:date>2014-02-03T23:50:10Z</dc:date>
    </item>
  </channel>
</rss>

