<?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: How do I do this without PROC SQL? in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/How-do-I-do-this-without-PROC-SQL/m-p/180962#M46097</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&amp;lt;after the sort which is needed for merge&amp;gt;&lt;/P&gt;&lt;P&gt;data combined;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; merge last_period (in=x) this_period(in=y rename=(hours=hours1));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by id;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if x and y;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hours_gained=hours1-hours;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;then proc means;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Tue, 13 Jan 2015 21:54:41 GMT</pubDate>
    <dc:creator>ballardw</dc:creator>
    <dc:date>2015-01-13T21:54:41Z</dc:date>
    <item>
      <title>How do I do this without PROC SQL?</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/How-do-I-do-this-without-PROC-SQL/m-p/180961#M46096</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;*&amp;nbsp; basic options;&lt;/P&gt;&lt;P&gt;OPTIONS MISSING=' ' SORTPGM=BEST ERRORS=1 LINESIZE=132 CENTER &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PAGESIZE=42 NUMBER OBS=MAX; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data last_period;&lt;/P&gt;&lt;P&gt;&amp;nbsp; input id hours;&lt;/P&gt;&lt;P&gt;&amp;nbsp; cards;&lt;/P&gt;&lt;P&gt;1 1&lt;/P&gt;&lt;P&gt;2 1&lt;/P&gt;&lt;P&gt;3 1&lt;/P&gt;&lt;P&gt;4 2&lt;/P&gt;&lt;P&gt;5 3&lt;/P&gt;&lt;P&gt;6 3&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data this_period;&lt;/P&gt;&lt;P&gt;&amp;nbsp; input id hours;&lt;/P&gt;&lt;P&gt;&amp;nbsp; cards;&lt;/P&gt;&lt;P&gt;1 1&lt;/P&gt;&lt;P&gt;2 2&lt;/P&gt;&lt;P&gt;3 3&lt;/P&gt;&lt;P&gt;5 5&lt;/P&gt;&lt;P&gt;6 5&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;* I want to find the average gain in hours for each id that shows up in both files;&lt;/P&gt;&lt;P&gt;* for this data, ID 1 has gained 0 hours from last period to this period, ID 2 has gained 1 hours, ID 3 has gained 2 hours;&lt;/P&gt;&lt;P&gt;* 4 is not in the second file and should be ignored;&lt;/P&gt;&lt;P&gt;* ID's 5 and 6 have both gained 2 hours;&lt;/P&gt;&lt;P&gt;* average gain should be ( 0 + 1 + 2 + 2 + 2 ) / 5 = 1.4&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;* using PROC SQL I can do;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sql;&lt;/P&gt;&lt;P&gt;create table average_gain as&lt;/P&gt;&lt;P&gt;select avg(b.hours-a.hours) as hours_gained&lt;/P&gt;&lt;P&gt;from last_period a inner join &lt;/P&gt;&lt;P&gt;this_period b on &lt;/P&gt;&lt;P&gt;a.id = b.id;&lt;/P&gt;&lt;P&gt;quit;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc print data=average_gain noobs;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; var hours_gained;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; title1 'Average additonal hours gained by PROC SQL';&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;* this works perfectly and, exactly as predicted, prints out 1.4;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;* I want to do the same thing without PROC SQL;&lt;/P&gt;&lt;P&gt;* I think I should be able to do better than the following;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sort data=last_period;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; by id;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc sort data=this_period;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; by id;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data this_period2;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; set this_period;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; keep id hours1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; hours1 = hours;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data average_gain2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; merge last_period (in = x) this_period2 (in = y);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; by id;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; if x and y;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data average_gain3;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; set average_gain2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; hours_gained = hours1 - hours;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc means data= average_gain3 mean;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; var hours_gained;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; title1 'Average additonal hours gained by PROC MEANS';&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;* prints out 1.4000000&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;* Am I doing this efficiently?&amp;nbsp; How would you do it? Any ideas for me?;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 13 Jan 2015 21:37:26 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/How-do-I-do-this-without-PROC-SQL/m-p/180961#M46096</guid>
      <dc:creator>HB</dc:creator>
      <dc:date>2015-01-13T21:37:26Z</dc:date>
    </item>
    <item>
      <title>Re: How do I do this without PROC SQL?</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/How-do-I-do-this-without-PROC-SQL/m-p/180962#M46097</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&amp;lt;after the sort which is needed for merge&amp;gt;&lt;/P&gt;&lt;P&gt;data combined;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; merge last_period (in=x) this_period(in=y rename=(hours=hours1));&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; by id;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if x and y;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hours_gained=hours1-hours;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;then proc means;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 13 Jan 2015 21:54:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/How-do-I-do-this-without-PROC-SQL/m-p/180962#M46097</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2015-01-13T21:54:41Z</dc:date>
    </item>
    <item>
      <title>Re: How do I do this without PROC SQL?</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/How-do-I-do-this-without-PROC-SQL/m-p/180963#M46098</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Okay.&amp;nbsp; That's a bunch better. &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I woudl have never figured out this part:&lt;/P&gt;&lt;P&gt;this_period(in=y rename=(hours=hours1));&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 13 Jan 2015 22:00:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/How-do-I-do-this-without-PROC-SQL/m-p/180963#M46098</guid>
      <dc:creator>HB</dc:creator>
      <dc:date>2015-01-13T22:00:40Z</dc:date>
    </item>
  </channel>
</rss>

