<?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: Do Loop within proc SQL in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613169#M179048</link>
    <description>&lt;P&gt;Ok, I will use PROC SUMMARY to avoid some looping here, there are also two output data sets WANT and WANT2, as I'm not sure which one you really want.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc summary nway data=raw(where=(inpatient=0));
    class id o_diab o_angina o_anemia;
    types id*(o_diab o_angina o_anemia);
    var clm_from;
    output out=minmax min=min max=max;
run;
data want;
    set minmax;
    array o o_diab o_angina o_anemia;
    array r r_diab r_angina r_anemia;
    do i=1 to dim(o);
        if o(i)=1 and max-min&amp;gt;=7 then do;
            r(i)=1;
            output;
        end;
        else if o(i)=1 then do;
           r(i)=0;
           output;
        end;
    end;
    drop i;
run;
proc summary data=want nway;
    class id;
    var r_diab r_angina r_anemia;
    output out=want2 max=;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Now that may seem still like a lot of typing, you can use a macro variable as the first line of the program to avoid some repetitive typing.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;%let o_names=o_diab o_angina o_anemia;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;and then replace the all the variable names with &amp;amp;o_names such as in line 2 above&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;class id &amp;amp;o_names;&lt;/CODE&gt;&amp;nbsp;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Thu, 19 Dec 2019 23:22:24 GMT</pubDate>
    <dc:creator>PaigeMiller</dc:creator>
    <dc:date>2019-12-19T23:22:24Z</dc:date>
    <item>
      <title>Do Loop within proc SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613108#M179018</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I am trying to create a binary variable (eg. diabetes) satisfying the condition - at least 2 outpatient visits &amp;gt;= 7 days apart then binary variable is 1, else 0. I made it work for 1 variable here - o_diab (code below). However I need it to loop through 27 variables and create 27 flag variables. Basically the o_diab needs to be looped to include all 27 variables and (1/0) variables such as diabetes needs to be created. Can someone please help? Thanks!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;(27 variables are =&amp;nbsp;o_angina o_anemia o_alc o_cad o_coag_def o_chf ...............................................)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;proc sql;&lt;BR /&gt;create table want as&lt;BR /&gt;select distinct id, index_date,&lt;BR /&gt;min(case when inpatient=0 and o_diab=1 then clm_from else . end) as firstDT_o_diab format date9.,&lt;BR /&gt;max(case when inpatient=0 and o_diab=1 then clm_from else . end) as lastDT_o_diab format date9.,&lt;BR /&gt;(case when calculated lastDT_o_diab - calculated firstDT_o_diab&amp;gt;=7 then 1 else 0 end) as diabetes&lt;BR /&gt;from raw;&lt;BR /&gt;quit;&lt;/P&gt;</description>
      <pubDate>Thu, 19 Dec 2019 17:24:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613108#M179018</guid>
      <dc:creator>Sv_kini</dc:creator>
      <dc:date>2019-12-19T17:24:56Z</dc:date>
    </item>
    <item>
      <title>Re: Do Loop within proc SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613110#M179019</link>
      <description>&lt;P&gt;You could do this relatively easily in a DATA step using ARRAYs.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you have to do this in PROC SQL, you would need a macro to perform the looping.&lt;/P&gt;</description>
      <pubDate>Thu, 19 Dec 2019 17:35:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613110#M179019</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2019-12-19T17:35:38Z</dc:date>
    </item>
    <item>
      <title>Re: Do Loop within proc SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613115#M179021</link>
      <description>&lt;P&gt;Could you please share how I can do it as an array?&lt;/P&gt;</description>
      <pubDate>Thu, 19 Dec 2019 17:45:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613115#M179021</guid>
      <dc:creator>Sv_kini</dc:creator>
      <dc:date>2019-12-19T17:45:18Z</dc:date>
    </item>
    <item>
      <title>Re: Do Loop within proc SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613118#M179022</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
    set raw;
    array o o_angina o_anemia ... ;
    array bin o_angina_bin o_anemia_bin ...;
    array firstdt_o firstdt_o_angina firstdt_o_anemia ...;
    array lastdt_o lastdt_o_angina lastdt_o_anemia ...;
    do i=1 to dim(o);
        if inpatient=0 and o[i]=1 then firstdt_o[i]=clm_from; 
        else firstdt_o[i]=.;
        if inpatient=0 and o[i]=1 then clm_from;
        else lastdt_o[i]=.;
        when lastdt_o[i]-firstdt_o[i]&amp;gt;=7 then bin=1; else bin=0;
    end;
    drop i;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;This is UNTESTED CODE&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you don't need to have separate firstdt_o and lastdt_o for each of the 27 conditions, these don't have to be array variables.&lt;/P&gt;</description>
      <pubDate>Thu, 19 Dec 2019 17:57:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613118#M179022</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2019-12-19T17:57:27Z</dc:date>
    </item>
    <item>
      <title>Re: Do Loop within proc SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613121#M179023</link>
      <description>&lt;P&gt;Unfortunately,that did not work ....maybe because there are multiple rows per id and I need to take min and max vertically? The when statement in proc SQL helped with that...attaching an example table of raw and want if it helps. Maybe a macro example around the proc sql that did work (first post) is easier? Thank you!!&lt;/P&gt;</description>
      <pubDate>Thu, 19 Dec 2019 18:33:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613121#M179023</guid>
      <dc:creator>Sv_kini</dc:creator>
      <dc:date>2019-12-19T18:33:05Z</dc:date>
    </item>
    <item>
      <title>Re: Do Loop within proc SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613122#M179024</link>
      <description>&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&lt;STRONG&gt;Raw&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;STRONG&gt;id&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;clm_from&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;o_diab&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;o_angina&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&lt;STRONG&gt;o_anemia&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;jan 1 2019&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;jan 5 2019&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;jan 10 2019&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;jan 15 2019&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Jan 20 2019&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;STRONG&gt;Want&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&lt;STRONG&gt;id&lt;/STRONG&gt;&lt;/TD&gt;&lt;TD&gt;firstdt_o_diab&lt;/TD&gt;&lt;TD&gt;lastdt_o_diab&lt;/TD&gt;&lt;TD&gt;diabetes&lt;/TD&gt;&lt;TD&gt;firstdt_o_angina&lt;/TD&gt;&lt;TD&gt;lastdt_o_diab&lt;/TD&gt;&lt;TD&gt;angina&lt;/TD&gt;&lt;TD&gt;firstdt_o_anemia&lt;/TD&gt;&lt;TD&gt;lastdt_o_anemia&lt;/TD&gt;&lt;TD&gt;anemia&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;jan 5 2019&lt;/TD&gt;&lt;TD&gt;jan 15 2019&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;jan 1 2019&lt;/TD&gt;&lt;TD&gt;Jan 20 2019&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;jan 1 2019&lt;/TD&gt;&lt;TD&gt;jan 5 2019&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Thu, 19 Dec 2019 18:35:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613122#M179024</guid>
      <dc:creator>Sv_kini</dc:creator>
      <dc:date>2019-12-19T18:35:42Z</dc:date>
    </item>
    <item>
      <title>Re: Do Loop within proc SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613123#M179025</link>
      <description>&lt;P&gt;I do not download Excel files as they are security risks. THe proper way to provide data is this:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="https://communities.sas.com/t5/SAS-Communities-Library/How-to-create-a-data-step-version-of-your-data-AKA-generate/ta-p/258712" target="_blank"&gt;https://communities.sas.com/t5/SAS-Communities-Library/How-to-create-a-data-step-version-of-your-data-AKA-generate/ta-p/258712&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can just provide the data for say 10 patients and 3 conditions, that ought to be enough.&lt;/P&gt;</description>
      <pubDate>Thu, 19 Dec 2019 18:37:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613123#M179025</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2019-12-19T18:37:53Z</dc:date>
    </item>
    <item>
      <title>Re: Do Loop within proc SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613140#M179033</link>
      <description>&lt;P&gt;Sorry, here you go..pasted below. I think I created all possible scenarios using 2 fictitious ID's and 3 conditions. The Raw data is what it looks like right now and the want data is what I would like it to look like. Thanks!!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Raw&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;id&lt;/TD&gt;&lt;TD&gt;clm_from&lt;/TD&gt;&lt;TD&gt;o_diab&lt;/TD&gt;&lt;TD&gt;o_angina&lt;/TD&gt;&lt;TD&gt;o_anemia&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;jan 1 2019&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;jan 5 2019&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;jan 10 2019&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;jan 15 2019&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Jan 20 2019&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;mar 5 2019&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;mar 10 2019&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;apr 5 2019&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Want&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;id&lt;/TD&gt;&lt;TD&gt;firstdt_o_diab&lt;/TD&gt;&lt;TD&gt;lastdt_o_diab&lt;/TD&gt;&lt;TD&gt;diabetes&lt;/TD&gt;&lt;TD&gt;firstdt_o_angina&lt;/TD&gt;&lt;TD&gt;lastdt_o_angina&lt;/TD&gt;&lt;TD&gt;angina&lt;/TD&gt;&lt;TD&gt;firstdt_o_anemia&lt;/TD&gt;&lt;TD&gt;lastdt_o_anemia&lt;/TD&gt;&lt;TD&gt;anemia&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;jan 5 2019&lt;/TD&gt;&lt;TD&gt;jan 15 2019&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;jan 1 2019&lt;/TD&gt;&lt;TD&gt;Jan 20 2019&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;jan 1 2019&lt;/TD&gt;&lt;TD&gt;jan 5 2019&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;mar 5 2019&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;mar 5 2019&lt;/TD&gt;&lt;TD&gt;mar 10 2019&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;</description>
      <pubDate>Thu, 19 Dec 2019 20:25:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613140#M179033</guid>
      <dc:creator>Sv_kini</dc:creator>
      <dc:date>2019-12-19T20:25:22Z</dc:date>
    </item>
    <item>
      <title>Re: Do Loop within proc SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613141#M179034</link>
      <description>&lt;P&gt;I would like the data provided as SAS data step code, according to the instructions that I linked to above.&lt;/P&gt;</description>
      <pubDate>Thu, 19 Dec 2019 20:39:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613141#M179034</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2019-12-19T20:39:53Z</dc:date>
    </item>
    <item>
      <title>Re: Do Loop within proc SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613150#M179041</link>
      <description>&lt;P&gt;data raw;&lt;BR /&gt;input ID clm_from o_diab o_angina o_anemia;&lt;BR /&gt;informat clm_from ddmmyy10.;&lt;BR /&gt;format clm_from ddmmyy10.;&lt;BR /&gt;datalines;&lt;BR /&gt;1 01/01/2019 0 1 1&lt;BR /&gt;1 05/01/2019 1 1 1&lt;BR /&gt;1 10/01/2019 0 0 0&lt;BR /&gt;1 15/01/2019 1 0 0&lt;BR /&gt;1 20/01/2019 0 1 0&lt;BR /&gt;2 05/03/2019 1 0 1&lt;BR /&gt;2 10/03/2019 0 0 1&lt;BR /&gt;2 05/04/2019 0 0 0&lt;BR /&gt;;&lt;BR /&gt;RUN;&lt;/P&gt;</description>
      <pubDate>Thu, 19 Dec 2019 21:28:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613150#M179041</guid>
      <dc:creator>Sv_kini</dc:creator>
      <dc:date>2019-12-19T21:28:53Z</dc:date>
    </item>
    <item>
      <title>Re: Do Loop within proc SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613161#M179045</link>
      <description>&lt;P&gt;This doesn't match the original problem statement. There is no variable named INPATIENT.&lt;/P&gt;</description>
      <pubDate>Thu, 19 Dec 2019 22:30:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613161#M179045</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2019-12-19T22:30:15Z</dc:date>
    </item>
    <item>
      <title>Re: Do Loop within proc SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613167#M179047</link>
      <description>&lt;P&gt;Oh yes, added it in.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data raw;&lt;BR /&gt;input ID clm_from inpatient o_diab o_angina o_anemia;&lt;BR /&gt;informat clm_from ddmmyy10.;&lt;BR /&gt;format clm_from ddmmyy10.;&lt;BR /&gt;datalines;&lt;BR /&gt;1 01/01/2019 0 0 1 1&lt;BR /&gt;1 05/01/2019 0 1 1 1&lt;BR /&gt;1 10/01/2019 0 0 0 0&lt;BR /&gt;1 15/01/2019 0 1 0 0&lt;BR /&gt;1 20/01/2019 0 0 1 0&lt;BR /&gt;2 05/03/2019 0 1 0 1&lt;BR /&gt;2 10/03/2019 0 0 0 1&lt;BR /&gt;2 05/04/2019 0 0 0 0&lt;BR /&gt;;&lt;BR /&gt;RUN;&lt;/P&gt;</description>
      <pubDate>Thu, 19 Dec 2019 22:36:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613167#M179047</guid>
      <dc:creator>Sv_kini</dc:creator>
      <dc:date>2019-12-19T22:36:42Z</dc:date>
    </item>
    <item>
      <title>Re: Do Loop within proc SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613169#M179048</link>
      <description>&lt;P&gt;Ok, I will use PROC SUMMARY to avoid some looping here, there are also two output data sets WANT and WANT2, as I'm not sure which one you really want.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc summary nway data=raw(where=(inpatient=0));
    class id o_diab o_angina o_anemia;
    types id*(o_diab o_angina o_anemia);
    var clm_from;
    output out=minmax min=min max=max;
run;
data want;
    set minmax;
    array o o_diab o_angina o_anemia;
    array r r_diab r_angina r_anemia;
    do i=1 to dim(o);
        if o(i)=1 and max-min&amp;gt;=7 then do;
            r(i)=1;
            output;
        end;
        else if o(i)=1 then do;
           r(i)=0;
           output;
        end;
    end;
    drop i;
run;
proc summary data=want nway;
    class id;
    var r_diab r_angina r_anemia;
    output out=want2 max=;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Now that may seem still like a lot of typing, you can use a macro variable as the first line of the program to avoid some repetitive typing.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;%let o_names=o_diab o_angina o_anemia;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;and then replace the all the variable names with &amp;amp;o_names such as in line 2 above&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;class id &amp;amp;o_names;&lt;/CODE&gt;&amp;nbsp;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 19 Dec 2019 23:22:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613169#M179048</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2019-12-19T23:22:24Z</dc:date>
    </item>
    <item>
      <title>Re: Do Loop within proc SQL</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613201#M179061</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/304211"&gt;@Sv_kini&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I have created the below code. Please test it to see whether it corresponds to your need and let me know.&lt;/P&gt;
&lt;P&gt;NB: I don't understand why you want to retrieve first and last date for a disease when the "flag" indicating that there were&amp;nbsp;&lt;SPAN&gt;at least 2 outpatient visits &amp;gt;= 7 days apart and each one&amp;nbsp;satisfying the condition is equal to 0.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;So the below&amp;nbsp;&lt;/SPAN&gt;output doesn't show that.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Best regards,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data raw;
	input ID clm_from inpatient o_diab o_angina o_anemia;
	informat clm_from ddmmyy10.;
	format clm_from ddmmyy10.;
	datalines;
1 01/01/2019 0 0 1 1
1 05/01/2019 0 1 1 1
1 10/01/2019 0 0 0 0
1 15/01/2019 0 1 0 0
1 20/01/2019 0 0 1 0
2 05/03/2019 0 1 0 1
2 10/03/2019 0 0 0 1
2 05/04/2019 0 0 0 0
	;
run;

/* Retrieve the max number of observation for an ID in macrovariable &amp;amp;count_obs */
proc sql noprint;
	select max(count_obs) into: count_obs from (select count(*) as count_obs from raw group by id);
quit;

/* Retrieve the list of diseases = diab, angina, ... in the dataset. raw_col */
proc contents data=raw out=raw_col (keep = name where=(lowcase(name) like 'o_%')) noprint;
run;

proc sort data=raw out=list_id (keep=id) nodupkey;
	by ID;
run;

/* Put the list of disease in macrovariable &amp;amp;list_dis */
proc sql noprint;
	select dis into:list_dis separated by " " from list_disease;
quit;

/* Macro to create for a specific disease the table containing the flag, the first and the last date */

%macro loop (disease);

	/* Identify cases where flag = 1 (&amp;lt;=&amp;gt; &amp;gt;7 days between 2 visits) + the last date */
	data dst_&amp;amp;disease._last (keep= id &amp;amp;disease lastdt_o_&amp;amp;disease);
		set raw;
		by ID;

		array _lagID (&amp;amp;count_obs);
		array _lago_&amp;amp;disease (&amp;amp;count_obs);
		array _lagCLM_&amp;amp;disease. (&amp;amp;count_obs);
	
		%do i=1 %to &amp;amp;count_obs;
			_lagID(&amp;amp;i) = lag&amp;amp;i.(ID);
			_lago_&amp;amp;disease.(&amp;amp;i) = lag&amp;amp;i.(o_&amp;amp;disease);
			_lagCLM_&amp;amp;disease.(&amp;amp;i.) = clm_from - lag&amp;amp;i.(clm_from);
		%end;
	
		%do i=1 %to &amp;amp;count_obs;
			if _lagID(&amp;amp;i) ne ID or (o_&amp;amp;disease. &amp;lt;1 or _lago_&amp;amp;disease.(&amp;amp;i) &amp;lt;1) then _lagCLM_&amp;amp;disease.(&amp;amp;i) = 0;
		%end;
	
		if max(of _lagCLM_&amp;amp;disease.(*)) &amp;gt;=7 then do;
			&amp;amp;disease = 1;
			output;
		end;
		rename clm_from = lastdt_o_&amp;amp;disease;
	run;

	/* Identify the first date */
	data dst_&amp;amp;disease._first (keep=id clm_from rename=(clm_from = firstdt_o_&amp;amp;disease));
		set raw;
		by ID;
		where o_&amp;amp;disease = 1;
		if first.ID then output;
	run;

	/* Merge */
	proc sql;
		create table dataset_&amp;amp;disease as
		select a.ID, b.firstdt_o_&amp;amp;disease, a.lastdt_o_&amp;amp;disease, a.&amp;amp;disease
		from dst_&amp;amp;disease._last as a left join dst_&amp;amp;disease._first as b
		on a.id = b.id;
	quit;

%mend;

/* Execute the macro %loop for each disease specified in the raw_col dataset */
data list_disease;
	set raw_col;
	dis = compress(name,"o_");
	rc=dosubl(cats('%loop(',dis,')'));
run;

/* Merge all datasets by ID + put the disease flag to 0 when not equal to 1 */
data want;
	merge list_id dataset:;
	by ID;
	array _dis (*) &amp;amp;list_dis;
	do i=1 to dim(_dis);
		if _dis(i) = . then _dis(i) = 0;
	end;
	drop i;
run;





proc print data=want;
	id id;
run;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-center" image-alt="Dataset WANT: output" style="width: 600px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/34972iA552223AF8F907B1/image-size/large?v=v2&amp;amp;px=999" role="button" title="Capture d’écran 2019-12-20 à 09.59.37.png" alt="Dataset WANT: output" /&gt;&lt;span class="lia-inline-image-caption" onclick="event.preventDefault();"&gt;Dataset WANT: output&lt;/span&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Fri, 20 Dec 2019 09:00:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Do-Loop-within-proc-SQL/m-p/613201#M179061</guid>
      <dc:creator>ed_sas_member</dc:creator>
      <dc:date>2019-12-20T09:00:55Z</dc:date>
    </item>
  </channel>
</rss>

