<?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 Proc sql sub query problem? in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Proc-sql-sub-query-problem/m-p/228967#M41386</link>
    <description>&lt;P&gt;Is the following even possible?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;PROC SQL;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; CREATE TABLE TEMP AS&lt;/P&gt;
&lt;P&gt;&amp;nbsp; SELECT A.OBS1,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A.DATEPART(DATETIME) AS DATE FORMAT DATE9.,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A.HOUR(DATETIME) AS HOUR FORMATE TIME9.,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A.CASE&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHEN OBS3='GIJeff' THEN&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;&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; (OBS4-OBS5)&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;&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; END AS OBS2,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B.AVG(OBS2)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; FROM TABLE1 A,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; (SELECT OBS2&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM TABLE1) B&lt;/P&gt;
&lt;P&gt;&amp;nbsp; WHERE OBS6 IN(2,3,4);&lt;/P&gt;
&lt;P&gt;QUIT;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Basically, can you perform AVERAGE and CASE functions while trying to sub select 1 observations from another table?&lt;/P&gt;</description>
    <pubDate>Wed, 07 Oct 2015 19:01:01 GMT</pubDate>
    <dc:creator>G_I_Jeff</dc:creator>
    <dc:date>2015-10-07T19:01:01Z</dc:date>
    <item>
      <title>Proc sql sub query problem?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Proc-sql-sub-query-problem/m-p/228967#M41386</link>
      <description>&lt;P&gt;Is the following even possible?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;PROC SQL;&lt;/P&gt;
&lt;P&gt;&amp;nbsp; CREATE TABLE TEMP AS&lt;/P&gt;
&lt;P&gt;&amp;nbsp; SELECT A.OBS1,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A.DATEPART(DATETIME) AS DATE FORMAT DATE9.,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A.HOUR(DATETIME) AS HOUR FORMATE TIME9.,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A.CASE&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHEN OBS3='GIJeff' THEN&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;&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; (OBS4-OBS5)&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;&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; END AS OBS2,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; B.AVG(OBS2)&lt;/P&gt;
&lt;P&gt;&amp;nbsp; FROM TABLE1 A,&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; (SELECT OBS2&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM TABLE1) B&lt;/P&gt;
&lt;P&gt;&amp;nbsp; WHERE OBS6 IN(2,3,4);&lt;/P&gt;
&lt;P&gt;QUIT;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Basically, can you perform AVERAGE and CASE functions while trying to sub select 1 observations from another table?&lt;/P&gt;</description>
      <pubDate>Wed, 07 Oct 2015 19:01:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Proc-sql-sub-query-problem/m-p/228967#M41386</guid>
      <dc:creator>G_I_Jeff</dc:creator>
      <dc:date>2015-10-07T19:01:01Z</dc:date>
    </item>
    <item>
      <title>Re: Proc sql sub query problem?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Proc-sql-sub-query-problem/m-p/229001#M41399</link>
      <description>&lt;P&gt;No problem. Just remember that variables belong to tables, and not functions&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;PROC SQL;
  CREATE TABLE TEMP AS
  SELECT A.OBS1,
                 DATEPART(A.DATETIME) AS DATE FORMAT=DATE9.,
                 HOUR(A.DATETIME) AS HOUR FORMAT=TIME9.,
                 CASE
                       WHEN A.OBS3='GIJeff' THEN
                            A.OBS4-A.OBS5
                        END AS OBS2,
                 MEAN(B.OBS2) AS MEAN_OBS2
  FROM TABLE1 A,
              (SELECT OBS2
                   FROM TABLE1) B
  WHERE A.OBS6 IN(2,3,4);
QUIT;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 07 Oct 2015 20:20:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Proc-sql-sub-query-problem/m-p/229001#M41399</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2015-10-07T20:20:25Z</dc:date>
    </item>
    <item>
      <title>Re: Proc sql sub query problem?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Proc-sql-sub-query-problem/m-p/229013#M41403</link>
      <description>&lt;P&gt;But the following would likely be more efficient&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;PROC SQL;
CREATE TABLE TEMP AS
SELECT 
	OBS1,
	DATEPART(DATETIME) AS DATE FORMAT=DATE9.,
	HOUR(DATETIME) AS HOUR FORMAT=TIME9.,
	CASE
		WHEN OBS3='GIJeff' THEN OBS4 - OBS5
		ELSE .
		END AS OBS2,
	(SELECT MEAN(OBS2) FROM TABLE1) AS MEAN_OBS2
FROM TABLE1
WHERE OBS6 IN(2, 3, 4);
QUIT;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Note that MEAN_OBS2 will be the average of OBS2 over all observations in Table1, not just those with OBS6 in (2, 3, 4).&lt;/P&gt;</description>
      <pubDate>Wed, 07 Oct 2015 20:53:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Proc-sql-sub-query-problem/m-p/229013#M41403</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2015-10-07T20:53:41Z</dc:date>
    </item>
    <item>
      <title>Re: Proc sql sub query problem?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Proc-sql-sub-query-problem/m-p/229015#M41404</link>
      <description>&lt;P&gt;Hi,&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Since you&amp;nbsp;did not provide any sample data, I took the liberty of creating two fictitious datasets. I tried to keep many&amp;nbsp;of your variable names the same, but you will see&amp;nbsp;that I "ad-libbed" quite a bit. Hope that's okay.&amp;nbsp;&lt;img id="robothappy" class="emoticon emoticon-robothappy" src="https://communities.sas.com/i/smilies/16x16_robot-happy.png" alt="Robot Happy" title="Robot Happy" /&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This example assumes that Table1 has one observation per individual&amp;nbsp;and Table2 may have multiple observations&amp;nbsp;per individual&amp;nbsp;(I made this assumption because you were trying to find the average).&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;DATA Table1;
  LENGTH Obs1 8 Name $10 Obs4 Obs5 Obs6 8;
  FORMAT Datetime DATETIME20.;
  Datetime = DATETIME() - RANUNI(1234)*60*86400;
  INPUT Obs1 Name $ Obs4 Obs5 Obs6;
  DATALINES;
1 Catherine 22 3  3
3 Jeff      34 14 3
4 Aaron     79 10 2
8 Brian     34 9  .
10 Eugene   60 12 4
11 Anne     73 8  4
20 Ryan     59 11 1
;
RUN;


DATA Table2;
  LENGTH Name $10 Day MilesDriven 8;
  INPUT Name $ Day MilesDriven;
  DATALINES;
  Catherine  1 11
  Catherine  2 33
  Catherine  3 7
  Catherine  4 31
  Jeff       1 12
  Jeff       2 36
  Brian      1 32
  Brian      2 21
  Brian      3 22
  Brian      4 21
  Eugene     1 11
  Eugene     2 52
  Eugene     3 12
  Eugene     4 11
  Anne       1 32
  Anne       2 13
  Anne       3 48
  Ryan       1 21
  Ryan       2 38
  Ryan       3 51
;
RUN;


PROC SQL;
  CREATE TABLE TEMP AS
  SELECT A.Obs1
       , A.Name
       , DATEPART(DATETIME) AS Date FORMAT=DATE9.
       , HOUR(DATETIME)     AS Hour FORMAT=TIME9.
       , CASE WHEN A.Name='Jeff' THEN (OBS4-OBS5)
              ELSE .
         END AS Obs2&lt;BR /&gt;
         /* In my later edit, I added this snippet (borrowing from PGStats) ...  */ &lt;BR /&gt;
       , (SELECT AVG(C.MilesDriven)&lt;BR /&gt;
          FROM TABLE2 AS C) AS Avg_Miles_Driven_All_Drivers
       , AVG(B.MilesDriven)    AS Avg_Miles_Driven
       , SUM(B.MilesDriven)    AS Total_Miles_Driven
       , MAX(B.MilesDriven)    AS Max_Daily_Miles_Driven
       , COUNT(DISTINCT B.Day) AS Num_Days_Driven
  FROM TABLE1 AS A
  LEFT JOIN TABLE2 AS B
    ON A.Name = B.Name
  WHERE Obs6 IN (2,3,4)
  GROUP BY A.Obs1
       , A.Name
       , calculated Date
       , calculated Hour
       , calculated Obs2;
QUIT;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The fictitious output would look&amp;nbsp;like this:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;IMG src="https://communities.sas.com/t5/image/serverpage/image-id/422i3EEFC2DEE6FF4E04/image-size/original?v=mpbl-1&amp;amp;px=-1" border="0" alt="proc_sql_avg_case_statement_et_al.gif" title="proc_sql_avg_case_statement_et_al.gif" /&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 07 Oct 2015 21:20:51 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Proc-sql-sub-query-problem/m-p/229015#M41404</guid>
      <dc:creator>hbi</dc:creator>
      <dc:date>2015-10-07T21:20:51Z</dc:date>
    </item>
  </channel>
</rss>

