<?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: Nested Loop and groupby in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Nested-Loop-and-groupby/m-p/757663#M239187</link>
    <description>&lt;P&gt;OK. You could try DOW skill. Also assuming your data has been sorted by group,date ;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;data have;
infile cards expandtabs truncover;
input GROUP	DATE : ddmmyy10.	ACTIVATED;
format date ddmmyy10.;
cards;
1	1/11/20	1
1	2/11/20	0
1	3/11/20	1
2	1/11/20	0
2	2/11/20	0
3	1/11/20	1
3	2/11/20	1
3	3/11/20	0
;
data want;
 do until(last.group);
  set have;
  by group;
  if first.group then first_date=date;
  if ACTIVATED=1 then has_ACTIVATED=1;
 end;
range_date=date-first_date;
 do until(last.group);
  set have;
  by group;
  if ACTIVATED=0 and has_ACTIVATED and range_date&amp;lt;=35 then flag=1;
   else flag=0;
   output;
 end;
 drop has_ACTIVATED range_date first_date;
run;&lt;/PRE&gt;</description>
    <pubDate>Wed, 28 Jul 2021 12:07:29 GMT</pubDate>
    <dc:creator>Ksharp</dc:creator>
    <dc:date>2021-07-28T12:07:29Z</dc:date>
    <item>
      <title>Nested Loop and groupby</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Nested-Loop-and-groupby/m-p/756853#M239033</link>
      <description>&lt;P&gt;Hi all,&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;New to loops in SAS and need some help with syntax and logic. My input table looks like the following:&amp;nbsp;&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;GROUP&lt;/TD&gt;&lt;TD&gt;DATE&lt;/TD&gt;&lt;TD&gt;ACTIVATED&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1/11/20&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2/11/20&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;3/11/20&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1/11/20&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2/11/20&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1/11/20&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;2/11/20&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;3/11/20&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;and I need to add a flag to identify any inactivation (ACTIVATED=0) if there is at least one activation(ACTIVATED=1) within 35 days. So here is the table result I would like to have:&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;GROUP&lt;/TD&gt;&lt;TD&gt;DATE&lt;/TD&gt;&lt;TD&gt;ACTIVATED&lt;/TD&gt;&lt;TD&gt;FLAG&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1/11/20&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;1&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;2/11/20&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;1&lt;/TD&gt;&lt;TD&gt;3/11/20&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;2&lt;/TD&gt;&lt;TD&gt;1/11/20&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;2&lt;/TD&gt;&lt;TD&gt;2/11/20&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;3&lt;/TD&gt;&lt;TD&gt;1/11/20&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;3&lt;/TD&gt;&lt;TD&gt;2/11/20&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;3&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;3/11/20&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;Here is the code I tried that I think the logic was okay, but I'm not familiar with the syntax in SAS. The idea is to have two pointers to go through all pairs in each group.&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;&amp;nbsp;
&amp;nbsp; set input;&amp;nbsp;
&amp;nbsp; by GROUP;&amp;nbsp;
&amp;nbsp; retain FLAG 0;&amp;nbsp;
&amp;nbsp; do i = first.GROUP to last.GROUP;&amp;nbsp;
&amp;nbsp; &amp;nbsp; do j = i+1 to last.GROUP;&amp;nbsp;
&amp;nbsp; &amp;nbsp; &amp;nbsp; if -35 &amp;lt;= intck('DAY', i.DATE, j.DATE) &amp;lt;= 35 and i.ACTIVATED = 0 and j.ACTIVATED = 1 then i.FLAG=1;
&amp;nbsp; &amp;nbsp; &amp;nbsp; else if -35 &amp;lt;= intck('DAY', i.DATE, j.DATE) &amp;lt;= 35 and i.ACTIVATED = 1 and j.ACTIVATED = 0 then j.FLAG=1;
&amp;nbsp; &amp;nbsp; &amp;nbsp; end;&amp;nbsp;
&amp;nbsp; &amp;nbsp;end;&amp;nbsp;
run;&amp;nbsp;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Any inputs would be appreciated!&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 27 Jul 2021 02:30:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Nested-Loop-and-groupby/m-p/756853#M239033</guid>
      <dc:creator>dart486945</dc:creator>
      <dc:date>2021-07-27T02:30:59Z</dc:date>
    </item>
    <item>
      <title>Re: Nested Loop and groupby</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Nested-Loop-and-groupby/m-p/756858#M239036</link>
      <description>&lt;P&gt;If you are new to sas, you should read the documentation or attend to the 1st programming course to get a basic understanding of the fundamental concepts of sas.&lt;/P&gt;
&lt;P&gt;A data step is always a loop:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt; 69         data work.ClassClone;
 70            set sashelp.class;
 71         
 72            put Name=;
 73         run;
 
 Name=Alfred
 Name=Alice
 Name=Barbara
 Name=Carol
 Name=Henry
 Name=James
 Name=Jane
 Name=Janet
 Name=Jeffrey
 Name=John
 Name=Joyce
 Name=Judy
 Name=Louise
 Name=Mary
 Name=Philip
 Name=Robert
 Name=Ronald
 Name=Thomas
 Name=William
 NOTE: There were 19 observations read from the data set SASHELP.CLASS.
 NOTE: The data set WORK.CLASSCLONE has 19 observations and 5 variables.&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Back to your task: why is flag=1 in the second observation? Also please post data in usable form, especially when data contains dates, we need to know that the dates are sas dates and which format is attached, i use dd/mm/yyyy normally, but your dates could be in the weird mm/dd/yy format.&lt;/P&gt;</description>
      <pubDate>Tue, 27 Jul 2021 04:53:21 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Nested-Loop-and-groupby/m-p/756858#M239036</guid>
      <dc:creator>andreas_lds</dc:creator>
      <dc:date>2021-07-27T04:53:21Z</dc:date>
    </item>
    <item>
      <title>Re: Nested Loop and groupby</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Nested-Loop-and-groupby/m-p/757112#M239070</link>
      <description>&lt;P&gt;Assuming I understand your question.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;data have;
infile cards expandtabs truncover;
input GROUP	DATE : ddmmyy10.	ACTIVATED;
format date ddmmyy10.;
cards;
1	1/11/20	1
1	2/11/20	0
1	3/11/20	1
2	1/11/20	0
2	2/11/20	0
3	1/11/20	1
3	2/11/20	1
3	3/11/20	0
;

proc sql;
create table want as
select *,(ACTIVATED=0 and sum(ACTIVATED=1) and range(date)&amp;lt;=35) as flag
 from have
  group by group
   order by 1,2;
quit;&lt;/PRE&gt;</description>
      <pubDate>Tue, 27 Jul 2021 12:14:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Nested-Loop-and-groupby/m-p/757112#M239070</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2021-07-27T12:14:34Z</dc:date>
    </item>
    <item>
      <title>Re: Nested Loop and groupby</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Nested-Loop-and-groupby/m-p/757522#M239127</link>
      <description>Thanks Ksharp for bringing up the sql version solution. This is close to what I was looking for, except for the range(date) looking at max date and min date instead of sequential dates. I think I know a solution to proceed.&lt;BR /&gt;&lt;BR /&gt;I still think the nested loop solution would be more straightforward here to have two pointers and look at every pair within each group. Would be great to learn how to do it in SAS.</description>
      <pubDate>Tue, 27 Jul 2021 20:40:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Nested-Loop-and-groupby/m-p/757522#M239127</guid>
      <dc:creator>dart486945</dc:creator>
      <dc:date>2021-07-27T20:40:23Z</dc:date>
    </item>
    <item>
      <title>Re: Nested Loop and groupby</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Nested-Loop-and-groupby/m-p/757663#M239187</link>
      <description>&lt;P&gt;OK. You could try DOW skill. Also assuming your data has been sorted by group,date ;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;data have;
infile cards expandtabs truncover;
input GROUP	DATE : ddmmyy10.	ACTIVATED;
format date ddmmyy10.;
cards;
1	1/11/20	1
1	2/11/20	0
1	3/11/20	1
2	1/11/20	0
2	2/11/20	0
3	1/11/20	1
3	2/11/20	1
3	3/11/20	0
;
data want;
 do until(last.group);
  set have;
  by group;
  if first.group then first_date=date;
  if ACTIVATED=1 then has_ACTIVATED=1;
 end;
range_date=date-first_date;
 do until(last.group);
  set have;
  by group;
  if ACTIVATED=0 and has_ACTIVATED and range_date&amp;lt;=35 then flag=1;
   else flag=0;
   output;
 end;
 drop has_ACTIVATED range_date first_date;
run;&lt;/PRE&gt;</description>
      <pubDate>Wed, 28 Jul 2021 12:07:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Nested-Loop-and-groupby/m-p/757663#M239187</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2021-07-28T12:07:29Z</dc:date>
    </item>
  </channel>
</rss>

