<?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: PROC SQL; retrain flag in New SAS User</title>
    <link>https://communities.sas.com/t5/New-SAS-User/PROC-SQL-retrain-flag/m-p/556972#M9929</link>
    <description>&lt;P&gt;Hello&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/153469"&gt;@radhikaa4&lt;/a&gt;&amp;nbsp; I too think you should switch to datastep. If your company is paying for a commercial SAS enterprise license, why not use better approaches right?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input subject_id	date :mmddyy10.	volume	flag_1	flag_2 ;
format date mmddyy10.;
cards;
1234	1/5/2014	23	0	0
1234	1/6/2014	11	1	0
1234	1/7/2014	93	0	1
1234	1/8/2014	12	0	0
1234	1/9/2014	43	0	0
4432	5/23/2015	32	0	0
4432	5/24/2015	21	0	0
4432	5/25/2015	76	1	0
4432	5/26/2015	23	0	1
;

data want;
set have;
by subject_id date;
if first.subject_id then d=1;
if d&amp;lt;=1 ;
d+flag_2;
drop d;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Tue, 07 May 2019 23:04:18 GMT</pubDate>
    <dc:creator>novinosrin</dc:creator>
    <dc:date>2019-05-07T23:04:18Z</dc:date>
    <item>
      <title>PROC SQL; retrain flag</title>
      <link>https://communities.sas.com/t5/New-SAS-User/PROC-SQL-retrain-flag/m-p/556945#M9923</link>
      <description>&lt;P&gt;Hello&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have the following dataset&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;subject_id&lt;/TD&gt;&lt;TD&gt;date&lt;/TD&gt;&lt;TD&gt;volume&lt;/TD&gt;&lt;TD&gt;flag_1&lt;/TD&gt;&lt;TD&gt;flag_2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1234&lt;/TD&gt;&lt;TD&gt;1/5/2014&lt;/TD&gt;&lt;TD&gt;23&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1234&lt;/TD&gt;&lt;TD&gt;1/6/2014&lt;/TD&gt;&lt;TD&gt;11&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1234&lt;/TD&gt;&lt;TD&gt;1/7/2014&lt;/TD&gt;&lt;TD&gt;93&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1234&lt;/TD&gt;&lt;TD&gt;1/8/2014&lt;/TD&gt;&lt;TD&gt;12&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1234&lt;/TD&gt;&lt;TD&gt;1/9/2014&lt;/TD&gt;&lt;TD&gt;43&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4432&lt;/TD&gt;&lt;TD&gt;5/23/2015&lt;/TD&gt;&lt;TD&gt;32&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4432&lt;/TD&gt;&lt;TD&gt;5/24/2015&lt;/TD&gt;&lt;TD&gt;21&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4432&lt;/TD&gt;&lt;TD&gt;5/25/2015&lt;/TD&gt;&lt;TD&gt;76&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4432&lt;/TD&gt;&lt;TD&gt;5/26/2015&lt;/TD&gt;&lt;TD&gt;23&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;What I would like to do is extract values before flag_2. Something like this:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;subject_id&lt;/TD&gt;&lt;TD&gt;date&lt;/TD&gt;&lt;TD&gt;volume&lt;/TD&gt;&lt;TD&gt;flag_1&lt;/TD&gt;&lt;TD&gt;flag_2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1234&lt;/TD&gt;&lt;TD&gt;1/5/2014&lt;/TD&gt;&lt;TD&gt;23&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1234&lt;/TD&gt;&lt;TD&gt;1/6/2014&lt;/TD&gt;&lt;TD&gt;11&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;STRONG&gt;1234&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;1/7/2014&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;93&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;0&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4432&lt;/TD&gt;&lt;TD&gt;5/23/2015&lt;/TD&gt;&lt;TD&gt;32&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4432&lt;/TD&gt;&lt;TD&gt;5/24/2015&lt;/TD&gt;&lt;TD&gt;21&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4432&lt;/TD&gt;&lt;TD&gt;5/25/2015&lt;/TD&gt;&lt;TD&gt;76&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4432&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;5/26/2015&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;23&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;0&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;1&lt;/STRONG&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am completely stuck using PROC SQL;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;SELECT subjectid, date, volume, flag_1, flag_2&lt;/P&gt;&lt;P&gt;FROM a.dataset&lt;/P&gt;&lt;P&gt;where flag_2 &amp;gt; flag_1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 07 May 2019 21:42:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/PROC-SQL-retrain-flag/m-p/556945#M9923</guid>
      <dc:creator>radhikaa4</dc:creator>
      <dc:date>2019-05-07T21:42:55Z</dc:date>
    </item>
    <item>
      <title>Re: PROC SQL; retrain flag</title>
      <link>https://communities.sas.com/t5/New-SAS-User/PROC-SQL-retrain-flag/m-p/556955#M9926</link>
      <description>&lt;P&gt;It looks like you want dates prior to or the same as when flag_2 =1, not a comparison of flag_1 and flag_2.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Is there ever more than one flag_2 = 1 for the same subjected? If so, what is the selection rule then?&lt;/P&gt;
&lt;P&gt;What do you want if there are no flag_2=1 for a subject?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This untested code might get you started if there is only one flag_2=1:&lt;/P&gt;
&lt;PRE&gt;proc sql;
   create table want as
   SELECT a.subjectid, a.date, a.volume, a.flag_1, a.flag_2
   FROM a.dataset as a
        left join 
        ( select * from a.dataset where 
          flag_2=1) as b
        on a.subject_id = b.subject_id
   where a.date le b.date
   ;
quit;&lt;/PRE&gt;</description>
      <pubDate>Tue, 07 May 2019 22:11:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/PROC-SQL-retrain-flag/m-p/556955#M9926</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2019-05-07T22:11:08Z</dc:date>
    </item>
    <item>
      <title>Re: PROC SQL; retrain flag</title>
      <link>https://communities.sas.com/t5/New-SAS-User/PROC-SQL-retrain-flag/m-p/556958#M9927</link>
      <description>&lt;P&gt;Can the same ID have more than one observation where FLAG_2=1 ?&amp;nbsp; What should happen?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In any case, I would lean toward a DATA step instead of SQL, as long as your data is already in sorted order:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
   set have;
   by id;
   retain output_flag 'N';
   if first.id then output_flag='Y';
   if output_flag='Y' then output;
   if flag_2=1 then output_flag='N';
   drop output_flag;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Processing the records sequentially should be much faster than anything that involves a join.&lt;/P&gt;</description>
      <pubDate>Tue, 07 May 2019 22:23:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/PROC-SQL-retrain-flag/m-p/556958#M9927</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2019-05-07T22:23:35Z</dc:date>
    </item>
    <item>
      <title>Re: PROC SQL; retrain flag</title>
      <link>https://communities.sas.com/t5/New-SAS-User/PROC-SQL-retrain-flag/m-p/556962#M9928</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/153469"&gt;@radhikaa4&lt;/a&gt;&amp;nbsp; it's fairly straight forward--&amp;gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input subject_id	date :mmddyy10.	volume	flag_1	flag_2 ;
format date mmddyy10.;
cards;
1234	1/5/2014	23	0	0
1234	1/6/2014	11	1	0
1234	1/7/2014	93	0	1
1234	1/8/2014	12	0	0
1234	1/9/2014	43	0	0
4432	5/23/2015	32	0	0
4432	5/24/2015	21	0	0
4432	5/25/2015	76	1	0
4432	5/26/2015	23	0	1
;

proc sql;
create table want as
select *
from have
group by subject_id
having date&amp;lt;= max((flag_2=1)*date) 
order by subject_id,date;
quit;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 07 May 2019 22:29:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/PROC-SQL-retrain-flag/m-p/556962#M9928</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2019-05-07T22:29:19Z</dc:date>
    </item>
    <item>
      <title>Re: PROC SQL; retrain flag</title>
      <link>https://communities.sas.com/t5/New-SAS-User/PROC-SQL-retrain-flag/m-p/556972#M9929</link>
      <description>&lt;P&gt;Hello&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/153469"&gt;@radhikaa4&lt;/a&gt;&amp;nbsp; I too think you should switch to datastep. If your company is paying for a commercial SAS enterprise license, why not use better approaches right?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input subject_id	date :mmddyy10.	volume	flag_1	flag_2 ;
format date mmddyy10.;
cards;
1234	1/5/2014	23	0	0
1234	1/6/2014	11	1	0
1234	1/7/2014	93	0	1
1234	1/8/2014	12	0	0
1234	1/9/2014	43	0	0
4432	5/23/2015	32	0	0
4432	5/24/2015	21	0	0
4432	5/25/2015	76	1	0
4432	5/26/2015	23	0	1
;

data want;
set have;
by subject_id date;
if first.subject_id then d=1;
if d&amp;lt;=1 ;
d+flag_2;
drop d;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 07 May 2019 23:04:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/PROC-SQL-retrain-flag/m-p/556972#M9929</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2019-05-07T23:04:18Z</dc:date>
    </item>
    <item>
      <title>Re: PROC SQL; retrain flag</title>
      <link>https://communities.sas.com/t5/New-SAS-User/PROC-SQL-retrain-flag/m-p/556973#M9930</link>
      <description>Hi this works!&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;But now I ran into another problem (which I did not realize)&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;So:&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;subject_id&lt;BR /&gt;&lt;BR /&gt;date&lt;BR /&gt;&lt;BR /&gt;volume&lt;BR /&gt;&lt;BR /&gt;flag_1&lt;BR /&gt;&lt;BR /&gt;flag_2&lt;BR /&gt;&lt;BR /&gt;1234&lt;BR /&gt;&lt;BR /&gt;1/5/2014&lt;BR /&gt;&lt;BR /&gt;23&lt;BR /&gt;&lt;BR /&gt;0&lt;BR /&gt;&lt;BR /&gt;0&lt;BR /&gt;&lt;BR /&gt;1234&lt;BR /&gt;&lt;BR /&gt;1/6/2014&lt;BR /&gt;&lt;BR /&gt;11&lt;BR /&gt;&lt;BR /&gt;1&lt;BR /&gt;&lt;BR /&gt;0&lt;BR /&gt;&lt;BR /&gt;1234&lt;BR /&gt;&lt;BR /&gt;1/7/2014&lt;BR /&gt;&lt;BR /&gt;93&lt;BR /&gt;&lt;BR /&gt;0&lt;BR /&gt;&lt;BR /&gt;1&lt;BR /&gt;&lt;BR /&gt;4432&lt;BR /&gt;&lt;BR /&gt;5/23/2015&lt;BR /&gt;&lt;BR /&gt;32&lt;BR /&gt;&lt;BR /&gt;0&lt;BR /&gt;&lt;BR /&gt;0&lt;BR /&gt;&lt;BR /&gt;4432&lt;BR /&gt;&lt;BR /&gt;5/24/2015&lt;BR /&gt;&lt;BR /&gt;21&lt;BR /&gt;&lt;BR /&gt;0&lt;BR /&gt;&lt;BR /&gt;0&lt;BR /&gt;&lt;BR /&gt;4432&lt;BR /&gt;&lt;BR /&gt;5/25/2015&lt;BR /&gt;&lt;BR /&gt;76&lt;BR /&gt;&lt;BR /&gt;1&lt;BR /&gt;&lt;BR /&gt;0&lt;BR /&gt;&lt;BR /&gt;4432&lt;BR /&gt;&lt;BR /&gt;5/26/2015&lt;BR /&gt;&lt;BR /&gt;23&lt;BR /&gt;&lt;BR /&gt;0&lt;BR /&gt;&lt;BR /&gt;1&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;I also have to exclude the entries BEFORE flag_1 = 1&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;So:&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;subject_id&lt;BR /&gt;&lt;BR /&gt;date&lt;BR /&gt;&lt;BR /&gt;volume&lt;BR /&gt;&lt;BR /&gt;flag_1&lt;BR /&gt;&lt;BR /&gt;flag_2&lt;BR /&gt;&lt;BR /&gt;1234&lt;BR /&gt;&lt;BR /&gt;1/6/2014&lt;BR /&gt;&lt;BR /&gt;11&lt;BR /&gt;&lt;BR /&gt;1&lt;BR /&gt;&lt;BR /&gt;0&lt;BR /&gt;&lt;BR /&gt;1234&lt;BR /&gt;&lt;BR /&gt;1/7/2014&lt;BR /&gt;&lt;BR /&gt;93&lt;BR /&gt;&lt;BR /&gt;0&lt;BR /&gt;&lt;BR /&gt;1&lt;BR /&gt;&lt;BR /&gt;4432&lt;BR /&gt;&lt;BR /&gt;5/25/2015&lt;BR /&gt;&lt;BR /&gt;76&lt;BR /&gt;&lt;BR /&gt;1&lt;BR /&gt;&lt;BR /&gt;0&lt;BR /&gt;&lt;BR /&gt;4432&lt;BR /&gt;&lt;BR /&gt;5/26/2015&lt;BR /&gt;&lt;BR /&gt;23&lt;BR /&gt;&lt;BR /&gt;0&lt;BR /&gt;&lt;BR /&gt;1&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Thanks!&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;</description>
      <pubDate>Tue, 07 May 2019 23:09:02 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/PROC-SQL-retrain-flag/m-p/556973#M9930</guid>
      <dc:creator>radhikaa4</dc:creator>
      <dc:date>2019-05-07T23:09:02Z</dc:date>
    </item>
    <item>
      <title>Re: PROC SQL; retrain flag</title>
      <link>https://communities.sas.com/t5/New-SAS-User/PROC-SQL-retrain-flag/m-p/556995#M9932</link>
      <description>&lt;P&gt;Trying to keep it simple:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
select *
from have
group by subject_id
having 
    date &amp;gt;= min(case when flag_1 then date else . end) and
    date &amp;lt;= min(case when flag_2 then date else constant('BIG') end);
quit;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;but at the same time, being careful to handle cases when there is no flag_1 = 1 or no flag_2 = 1. Using the fact that everything is &amp;gt; Null&amp;nbsp; and nothing is &amp;gt; constant('BIG')&lt;/P&gt;</description>
      <pubDate>Wed, 08 May 2019 03:16:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/PROC-SQL-retrain-flag/m-p/556995#M9932</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2019-05-08T03:16:38Z</dc:date>
    </item>
  </channel>
</rss>

