<?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: Help with Do Loop to replicate Lag operation in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Help-with-Do-Loop-to-replicate-Lag-operation/m-p/172776#M264411</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi HHC,&lt;/P&gt;&lt;P&gt;I basically only reorganized the code. The original code is more compact, I find no problem with that.&lt;/P&gt;&lt;P&gt;I am using _N_ instead of i. I do not use t, instead I have a leave statement, when a condition is not met. No need for the additional data step, I am settin Good_luck=1 in the same data step.&lt;/P&gt;&lt;P&gt;If you need to look ahead more, just increase the numbers in &lt;EM&gt;&lt;STRONG&gt;bold&lt;/STRONG&gt;&lt;/EM&gt;.&lt;/P&gt;&lt;P&gt;Is it a gaming industry example? &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://communities.sas.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want2;&lt;/P&gt;&lt;P&gt;set want nobs=totalobs;&lt;/P&gt;&lt;P&gt;if price&amp;gt;level and _N_ &amp;lt;= totalobs-&lt;EM&gt;&lt;STRONG&gt;3&lt;/STRONG&gt;&lt;/EM&gt; then do j=_N_+1 to _N_+&lt;EM&gt;&lt;STRONG&gt;3&lt;/STRONG&gt;&lt;/EM&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set want (keep = price level rename=(price=prc1 level=lv1)) point=j;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if j &amp;lt; _N_+&lt;EM&gt;&lt;STRONG&gt;3&lt;/STRONG&gt;&lt;/EM&gt; then do;/*lag(-1)...lag(-2)*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if prc1&amp;gt;lv1 then do;/*at lag(-1), lag(-2) we check &amp;gt;*/&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; /*do nothing! It is like incrementing t in your original code: t=t+1; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else do;&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; leave; /*break out from the loop, Good_luck=.*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else do;/*lag(-3)*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if prc1&amp;lt;=lv1 then do;/*at lag(-3) we check &amp;lt;=*/&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; Good_luck=1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;end;/*end of loop and if*/&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 06 Oct 2014 08:34:57 GMT</pubDate>
    <dc:creator>gergely_batho</dc:creator>
    <dc:date>2014-10-06T08:34:57Z</dc:date>
    <item>
      <title>Help with Do Loop to replicate Lag operation</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Help-with-Do-Loop-to-replicate-Lag-operation/m-p/172773#M264408</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi Everyone,&lt;/P&gt;&lt;P&gt;I have the below data. I want to find record that:&lt;/P&gt;&lt;P&gt;Price&lt;I&gt;&amp;gt;Level&lt;I&gt; and Price[i+1]&amp;gt;Level[i+1] and Price[i+2]&amp;gt;Level[i+2] and and Price[i+3] LESS THAN Level[i+3].&lt;/I&gt;&lt;/I&gt;&lt;/P&gt;&lt;P&gt;Record 2 meet that condition and I want to create new variable say good=1.&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;I can do it easily with lag since Lag allow me to put record in the order.&lt;/P&gt;&lt;P&gt;Now I want to do it with Do Loop in the but the code seem to be too long since I need to go step by step.&lt;/P&gt;&lt;P&gt;Is there any better way to handle the Do loop like counting the time condition met combine with incorporating the order so that Do loop can be done in a better manner?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;----------added----------&lt;BR /&gt;I finally find a way to incorporate the order into a Sum condition measure ( the last code section).&lt;/P&gt;&lt;P&gt;This case, anytime t=3, it is the record I need.&lt;/P&gt;&lt;P&gt;Even though I did it, I do not truly understand the algorithm behind it. Is there any general method so that in the future, if I have to check 4 record, I can easily accomplish it?&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thank you for your help.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;HHC&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;BR /&gt;&amp;nbsp; input time price level;&lt;BR /&gt;&amp;nbsp; datalines;&lt;BR /&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9&lt;BR /&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;BR /&gt;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&lt;BR /&gt;4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&lt;BR /&gt;5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&lt;BR /&gt;6 5 100&lt;BR /&gt;7 5 9&lt;BR /&gt;;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*LAG method;&lt;BR /&gt;proc sort; by decending time;run;&lt;BR /&gt;data have; set have;&lt;BR /&gt;drop lp1-lp3 ll1-ll3;&lt;BR /&gt;lp1=lag1(price);&lt;BR /&gt;lp2=lag2(price);&lt;BR /&gt;lp3=lag3(price);&lt;/P&gt;&lt;P&gt;ll1=lag1(level);&lt;BR /&gt;ll2=lag2(level);&lt;BR /&gt;ll3=lag3(level);&lt;/P&gt;&lt;P&gt;if price&amp;gt;level and lp1&amp;gt;ll1 and lp2&amp;gt;ll2 and lp3&amp;lt;ll3 then Good_lag=1;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*DO LOOP method;&lt;/P&gt;&lt;P&gt;proc sort; by time;run;&lt;/P&gt;&lt;P&gt;data want;&lt;/P&gt;&lt;P&gt;drop i;&lt;BR /&gt;set have nobs=totalobs;&lt;BR /&gt;i+1;&lt;/P&gt;&lt;P&gt;if price &amp;gt; level and i le totalobs-2 then do j=i+1 to i+1;&lt;BR /&gt;set have (keep = price level rename=(price=prc level=lv)) point=j;&lt;BR /&gt; if prc&amp;gt;lv then do k=j+1 to j+1;&lt;BR /&gt; set have (keep = price level rename=(price=prc level=lv)) point=k;&lt;BR /&gt;&amp;nbsp; if prc&amp;gt;lv then do l=k+1 to k+1;&lt;BR /&gt;&amp;nbsp; set have (keep = price level rename=(price=prc level=lv)) point=l;&lt;BR /&gt;&amp;nbsp; if prc&amp;lt;lv then GOOD=1;&lt;BR /&gt;&amp;nbsp; end;&lt;BR /&gt; end;&lt;BR /&gt;end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;*final method;&lt;/P&gt;&lt;P&gt;data want2;&lt;/P&gt;&lt;P&gt;drop i;&lt;/P&gt;&lt;P&gt;set want nobs=totalobs;&lt;/P&gt;&lt;P&gt;i+1;&lt;/P&gt;&lt;P&gt;t=0;&lt;/P&gt;&lt;P&gt;if price&amp;gt;level and i le totalobs-3 then do j=i+1 to i+3;&lt;/P&gt;&lt;P&gt;set want (keep = price level rename=(price=prc1 level=lv1)) point=j;&lt;/P&gt;&lt;P&gt; if prc1&amp;gt;lv1 then t=t+(j-i+1)*3;&lt;/P&gt;&lt;P&gt; else if prc1&amp;lt;=lv1 then t=t-(j-i+1)*3;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;else t=.;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want2; set want2;&lt;/P&gt;&lt;P&gt;if t=3 then Good_luck=1;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 06 Oct 2014 01:07:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Help-with-Do-Loop-to-replicate-Lag-operation/m-p/172773#M264408</guid>
      <dc:creator>hhchenfx</dc:creator>
      <dc:date>2014-10-06T01:07:14Z</dc:date>
    </item>
    <item>
      <title>Re: Help with Do Loop to replicate Lag operation</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Help-with-Do-Loop-to-replicate-Lag-operation/m-p/172774#M264409</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;FIRSTOBS dataset option might be a better option &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://communities.sas.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;, unless you want to expand the list of lags:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;data have;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp; input time price level;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&amp;nbsp; datalines;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;4&amp;nbsp;&amp;nbsp;&amp;nbsp; 10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&amp;nbsp;&amp;nbsp; 100&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;data want;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;if not end1 then set have(firstobs=2 rename=(price=pr1 level=le1)) end=end1; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;if not end2 then set have(firstobs=3 rename=(price=pr2 level=le2)) end=end2; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;if not end3 then set have(firstobs=4 rename=(price=pr3 level=le3)) end=end3;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;set have;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;good_lag = price&amp;gt;level and pr1&amp;gt;le1 and pr2&amp;gt;le2 and pr3&amp;lt;le3;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;drop pr1-pr3 le1-le3;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;run; &lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;proc print data=want noobs; run;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;PG&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 06 Oct 2014 01:40:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Help-with-Do-Loop-to-replicate-Lag-operation/m-p/172774#M264409</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2014-10-06T01:40:56Z</dc:date>
    </item>
    <item>
      <title>Re: Help with Do Loop to replicate Lag operation</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Help-with-Do-Loop-to-replicate-Lag-operation/m-p/172775#M264410</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;SAS Data Step is very powerful but many times it may not be obvious&lt;/P&gt;&lt;P&gt;as in your case. If you translate your objective differently you&lt;/P&gt;&lt;P&gt;would have hit upon my idea.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;[1] You count the number of times the condition:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; price &amp;gt; level&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;is met.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;[2] When the condtion fails and if the count is 3 or more then you&lt;/P&gt;&lt;P&gt;have succeeded.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you apply this idea, Data Step is so simple requiring mere 6&lt;/P&gt;&lt;P&gt;statements. No need for lag-functions or other SET with POINTER=&lt;/P&gt;&lt;P&gt;options.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;You have not specified on how to deal with when price = level.&lt;/P&gt;&lt;P&gt;If you want this condition, you simply make the condtion as:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; price &amp;gt;= level&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;To have more data to check my program, I have replicated your&lt;/P&gt;&lt;P&gt;data once again as in:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;input time price level;&lt;/P&gt;&lt;P&gt;datalines;&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp; 5&amp;nbsp;&amp;nbsp; 9&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp; 6&amp;nbsp;&amp;nbsp; 3&lt;/P&gt;&lt;P&gt;3&amp;nbsp;&amp;nbsp; 8&amp;nbsp;&amp;nbsp; 5&lt;/P&gt;&lt;P&gt;4&amp;nbsp; 10&amp;nbsp;&amp;nbsp; 5&lt;/P&gt;&lt;P&gt;5&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp; 6&lt;/P&gt;&lt;P&gt;6&amp;nbsp;&amp;nbsp; 5 100&lt;/P&gt;&lt;P&gt;7&amp;nbsp;&amp;nbsp; 5&amp;nbsp;&amp;nbsp; 9&lt;/P&gt;&lt;P&gt;1&amp;nbsp;&amp;nbsp; 5&amp;nbsp;&amp;nbsp; 9&lt;/P&gt;&lt;P&gt;2&amp;nbsp;&amp;nbsp; 6&amp;nbsp;&amp;nbsp; 3&lt;/P&gt;&lt;P&gt;3&amp;nbsp;&amp;nbsp; 8&amp;nbsp;&amp;nbsp; 5&lt;/P&gt;&lt;P&gt;4&amp;nbsp; 10&amp;nbsp;&amp;nbsp; 5&lt;/P&gt;&lt;P&gt;5&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp; 6&lt;/P&gt;&lt;P&gt;6&amp;nbsp;&amp;nbsp; 5 100&lt;/P&gt;&lt;P&gt;7&amp;nbsp;&amp;nbsp; 5&amp;nbsp;&amp;nbsp; 9&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I have not dropped the count from the output data set so that&lt;/P&gt;&lt;P&gt;you can see how the count is used to terminate the sequence. You&lt;/P&gt;&lt;P&gt;may drop it, if needed.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: terminal, monaco;"&gt;data want;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: terminal, monaco;"&gt;&amp;nbsp;&amp;nbsp; set have end = eof;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: terminal, monaco;"&gt;&amp;nbsp;&amp;nbsp; indicator = 'NOGOOD';&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: terminal, monaco;"&gt;&amp;nbsp;&amp;nbsp; if price &amp;lt;&amp;nbsp; level then do; if count &amp;gt;= 3 then indicator = 'GOOD'; count = 0; end;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: terminal, monaco;"&gt;&amp;nbsp;&amp;nbsp; else if (price &amp;gt; level) then count + 1;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: terminal, monaco;"&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc print data = want;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Good Luck.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Muthia Kachirayan&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 06 Oct 2014 05:49:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Help-with-Do-Loop-to-replicate-Lag-operation/m-p/172775#M264410</guid>
      <dc:creator>KachiM</dc:creator>
      <dc:date>2014-10-06T05:49:32Z</dc:date>
    </item>
    <item>
      <title>Re: Help with Do Loop to replicate Lag operation</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Help-with-Do-Loop-to-replicate-Lag-operation/m-p/172776#M264411</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi HHC,&lt;/P&gt;&lt;P&gt;I basically only reorganized the code. The original code is more compact, I find no problem with that.&lt;/P&gt;&lt;P&gt;I am using _N_ instead of i. I do not use t, instead I have a leave statement, when a condition is not met. No need for the additional data step, I am settin Good_luck=1 in the same data step.&lt;/P&gt;&lt;P&gt;If you need to look ahead more, just increase the numbers in &lt;EM&gt;&lt;STRONG&gt;bold&lt;/STRONG&gt;&lt;/EM&gt;.&lt;/P&gt;&lt;P&gt;Is it a gaming industry example? &lt;img id="smileyhappy" class="emoticon emoticon-smileyhappy" src="https://communities.sas.com/i/smilies/16x16_smiley-happy.png" alt="Smiley Happy" title="Smiley Happy" /&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want2;&lt;/P&gt;&lt;P&gt;set want nobs=totalobs;&lt;/P&gt;&lt;P&gt;if price&amp;gt;level and _N_ &amp;lt;= totalobs-&lt;EM&gt;&lt;STRONG&gt;3&lt;/STRONG&gt;&lt;/EM&gt; then do j=_N_+1 to _N_+&lt;EM&gt;&lt;STRONG&gt;3&lt;/STRONG&gt;&lt;/EM&gt;;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set want (keep = price level rename=(price=prc1 level=lv1)) point=j;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if j &amp;lt; _N_+&lt;EM&gt;&lt;STRONG&gt;3&lt;/STRONG&gt;&lt;/EM&gt; then do;/*lag(-1)...lag(-2)*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if prc1&amp;gt;lv1 then do;/*at lag(-1), lag(-2) we check &amp;gt;*/&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; /*do nothing! It is like incrementing t in your original code: t=t+1; */&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else do;&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; leave; /*break out from the loop, Good_luck=.*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else do;/*lag(-3)*/&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if prc1&amp;lt;=lv1 then do;/*at lag(-3) we check &amp;lt;=*/&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; Good_luck=1;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;end;/*end of loop and if*/&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 06 Oct 2014 08:34:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Help-with-Do-Loop-to-replicate-Lag-operation/m-p/172776#M264411</guid>
      <dc:creator>gergely_batho</dc:creator>
      <dc:date>2014-10-06T08:34:57Z</dc:date>
    </item>
    <item>
      <title>Re: Help with Do Loop to replicate Lag operation</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Help-with-Do-Loop-to-replicate-Lag-operation/m-p/172777#M264412</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you for your help.&lt;/P&gt;&lt;P&gt; I like the method of breaking j into&lt;/P&gt;&lt;P&gt;if j &amp;lt; _N_+&lt;EM&gt;&lt;STRONG&gt;3&lt;/STRONG&gt;&lt;/EM&gt; then do for lag12&lt;/P&gt;&lt;P&gt;and else for lag3&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;That's how the order can be controlled.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;HHC&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 06 Oct 2014 14:10:34 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Help-with-Do-Loop-to-replicate-Lag-operation/m-p/172777#M264412</guid>
      <dc:creator>hhchenfx</dc:creator>
      <dc:date>2014-10-06T14:10:34Z</dc:date>
    </item>
  </channel>
</rss>

