<?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: how to generate variable for observation N based on information from observations &amp;gt; N? in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/how-to-generate-variable-for-observation-N-based-on-information/m-p/40248#M10413</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Eric, FYI, if you use the two set statement approach, you need to nest the file as a dummy within the second set statement.&amp;nbsp; e.g.:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE style="font-family: monospace, 'Courier New'; color: #000000; background-color: #ffffff; line-height: 1.1em; text-align: -webkit-auto; border-width: 1px; border-color: #2f6fab; border-style: dashed; padding: 1em;"&gt;set have ( firstobs = 2 keep = Measure rename = (Measure = Next_Measure) )
&amp;nbsp;&amp;nbsp;&amp;nbsp; have (&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; obs = 1 drop = _all_&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;That way you won't get the error when you read the last observation.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 27 Jan 2012 22:07:00 GMT</pubDate>
    <dc:creator>art297</dc:creator>
    <dc:date>2012-01-27T22:07:00Z</dc:date>
    <item>
      <title>how to generate variable for observation N based on information from observations &gt; N?</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/how-to-generate-variable-for-observation-N-based-on-information/m-p/40243#M10408</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, all suppose I have folowing data set:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE border="1" cellpadding="3" cellspacing="0" class="jiveBorder" height="161" style="border: 1px solid #000000; width: 74px;"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TH align="center" style="background-color: #6690bc;" valign="middle"&gt;var&lt;/TH&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I want to generate a new variable NewVar for each observation such that NewVar(of observation n) = Var( of observation n) - Var(of observation n-1). The new dataset should look like:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;TABLE border="1" cellpadding="3" cellspacing="0" class="jiveBorder" style="width: 4%; border: 1px solid #000000;"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TH align="center" style="background-color: #6690bc;" valign="middle"&gt;&lt;SPAN style="color: #ffffff;"&gt;&lt;STRONG&gt;var&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/TH&gt;&lt;TH align="center" style="background-color: #6690bc;" valign="middle"&gt;&lt;SPAN style="color: #ffffff;"&gt;&lt;STRONG&gt;NewVar&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/TH&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;-5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;&lt;BR /&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;how can I do this?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 27 Jan 2012 20:26:45 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/how-to-generate-variable-for-observation-N-based-on-information/m-p/40243#M10408</guid>
      <dc:creator>littlestone</dc:creator>
      <dc:date>2012-01-27T20:26:45Z</dc:date>
    </item>
    <item>
      <title>how to generate variable for observation N based on information from observations &gt; N?</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/how-to-generate-variable-for-observation-N-based-on-information/m-p/40244#M10409</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;One approach could be:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data have;&lt;/P&gt;&lt;P&gt;infile cards;&lt;/P&gt;&lt;P&gt;input var;&lt;/P&gt;&lt;P&gt;cards;&lt;/P&gt;&lt;P&gt;1&lt;/P&gt;&lt;P&gt;3&lt;/P&gt;&lt;P&gt;4&lt;/P&gt;&lt;P&gt;8&lt;/P&gt;&lt;P&gt;3&lt;/P&gt;&lt;P&gt;7&lt;/P&gt;&lt;P&gt;;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want (drop=_:);&lt;/P&gt;&lt;P&gt;merge have have(firstobs=2 rename=var=_var);&lt;/P&gt;&lt;P&gt;newvar=_var-var;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc print;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Have a Nice Weekend!&lt;/P&gt;&lt;P&gt;Haikuo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 27 Jan 2012 20:45:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/how-to-generate-variable-for-observation-N-based-on-information/m-p/40244#M10409</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2012-01-27T20:45:18Z</dc:date>
    </item>
    <item>
      <title>how to generate variable for observation N based on information from observations &gt; N?</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/how-to-generate-variable-for-observation-N-based-on-information/m-p/40245#M10410</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Thank you, Hai.kuo&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I know SAS has functions such as RETAIN, LAG that can return value from previous records; is there any similar fucntions that can return value from forward records?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 27 Jan 2012 21:12:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/how-to-generate-variable-for-observation-N-based-on-information/m-p/40245#M10410</guid>
      <dc:creator>littlestone</dc:creator>
      <dc:date>2012-01-27T21:12:33Z</dc:date>
    </item>
    <item>
      <title>how to generate variable for observation N based on information from observations &gt; N?</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/how-to-generate-variable-for-observation-N-based-on-information/m-p/40246#M10411</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt; I do not know of a look-ahead function.&amp;nbsp; &lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;If you sort your data in reverse order,&amp;nbsp; you can use the lag function to obtain this functionality.&amp;nbsp; But then you will need to re-sort after doing look-aheads.&amp;nbsp; I think that may be a more general solution because it would let you use group by processing in situations more complicated than your example.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 27 Jan 2012 21:39:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/how-to-generate-variable-for-observation-N-based-on-information/m-p/40246#M10411</guid>
      <dc:creator>LarryWorley</dc:creator>
      <dc:date>2012-01-27T21:39:27Z</dc:date>
    </item>
    <item>
      <title>Re: how to generate variable for observation N based on information from observations &gt; N?</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/how-to-generate-variable-for-observation-N-based-on-information/m-p/40247#M10412</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Not a "look ahead" function, but using two set statements where you start reading on the second observation in the second set will do:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data look_ahead;&lt;/P&gt;&lt;P&gt;set my_data;&lt;/P&gt;&lt;P&gt;set my_data(firstobs=2 rename=(my_var = next_var));&lt;/P&gt;&lt;P&gt;dif_ahead = next_var - my_var;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Be careful with the last observation: the second set statement hits end-of-file before the first observation. If you need that last observation of the first set, you have to take some measures.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;By the way: in your original post you wrote the formula: NewVar(of observation n) = Var( of observation n) - Var(of observation n-1).&lt;/P&gt;&lt;P&gt; I assume that you mean: NewVar(of observation n) = Var( of observation n+1) - Var(of observation n)&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 27 Jan 2012 21:52:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/how-to-generate-variable-for-observation-N-based-on-information/m-p/40247#M10412</guid>
      <dc:creator>ErikT</dc:creator>
      <dc:date>2012-01-27T21:52:58Z</dc:date>
    </item>
    <item>
      <title>Re: how to generate variable for observation N based on information from observations &gt; N?</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/how-to-generate-variable-for-observation-N-based-on-information/m-p/40248#M10413</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Eric, FYI, if you use the two set statement approach, you need to nest the file as a dummy within the second set statement.&amp;nbsp; e.g.:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;PRE style="font-family: monospace, 'Courier New'; color: #000000; background-color: #ffffff; line-height: 1.1em; text-align: -webkit-auto; border-width: 1px; border-color: #2f6fab; border-style: dashed; padding: 1em;"&gt;set have ( firstobs = 2 keep = Measure rename = (Measure = Next_Measure) )
&amp;nbsp;&amp;nbsp;&amp;nbsp; have (&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; obs = 1 drop = _all_&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;/PRE&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;That way you won't get the error when you read the last observation.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 27 Jan 2012 22:07:00 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/how-to-generate-variable-for-observation-N-based-on-information/m-p/40248#M10413</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2012-01-27T22:07:00Z</dc:date>
    </item>
    <item>
      <title>Re: how to generate variable for observation N based on information from observations &gt; N?</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/how-to-generate-variable-for-observation-N-based-on-information/m-p/40249#M10414</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Art,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;That is an elegant way to do it. Another way to do it, is by adding a NOBS option:&lt;/P&gt;&lt;P&gt;data test;&lt;/P&gt;&lt;P&gt;do n=1 to 10;&lt;/P&gt;&lt;P&gt;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data lookahead;&lt;/P&gt;&lt;P&gt;set test;&lt;/P&gt;&lt;P&gt;if _n_ le nobs then set test(firstobs=2 rename=( n=m) nobs=nobs);&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;proc print;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 27 Jan 2012 22:23:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/how-to-generate-variable-for-observation-N-based-on-information/m-p/40249#M10414</guid>
      <dc:creator>ErikT</dc:creator>
      <dc:date>2012-01-27T22:23:11Z</dc:date>
    </item>
    <item>
      <title>Re: how to generate variable for observation N based on information from observations &gt; N?</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/how-to-generate-variable-for-observation-N-based-on-information/m-p/40250#M10415</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I know this is getting silly (I mean my solution), if you want to use LAG() without sorting, here you go:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want (drop=_:);&lt;/P&gt;&lt;P&gt;set have(rename=var=_var) end=last;&lt;/P&gt;&lt;P&gt;newvar=_var-lag(_var);&lt;/P&gt;&lt;P&gt;var=lag(_var);&lt;/P&gt;&lt;P&gt;if _n_&amp;gt;1 then output;&lt;/P&gt;&lt;P&gt;if last then &lt;/P&gt;&lt;P&gt;&amp;nbsp; do;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; var=_var;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; call missing(newvar);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; output;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Kindly Regards,&lt;/P&gt;&lt;P&gt;Haikuo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 28 Jan 2012 03:22:51 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/how-to-generate-variable-for-observation-N-based-on-information/m-p/40250#M10415</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2012-01-28T03:22:51Z</dc:date>
    </item>
    <item>
      <title>Re: how to generate variable for observation N based on information from observations &gt; N?</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/how-to-generate-variable-for-observation-N-based-on-information/m-p/40251#M10416</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Or if you have ETS and don't care about sign, here is another way:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc expand data=have out=want;&lt;/P&gt;&lt;P&gt;convert var = newvar&amp;nbsp;&amp;nbsp; / transformout=(reverse MOVRANGE 2 reverse);&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Or you need one more step to have your sign,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;proc expand data=have out=want1;&lt;/P&gt;&lt;P&gt;convert var = _lead&amp;nbsp;&amp;nbsp; / transformout=(lead 1);&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data&amp;nbsp; want (drop=time _lead);&lt;/P&gt;&lt;P&gt;set want1;&lt;/P&gt;&lt;P&gt;newvar=_lead-var;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;As you have noted, proc expand does have sort of LEAD function.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Kindly Regards,&lt;/P&gt;&lt;P&gt;Haikuo&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 28 Jan 2012 14:24:47 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/how-to-generate-variable-for-observation-N-based-on-information/m-p/40251#M10416</guid>
      <dc:creator>Haikuo</dc:creator>
      <dc:date>2012-01-28T14:24:47Z</dc:date>
    </item>
    <item>
      <title>Re: how to generate variable for observation N based on information from observations &gt; N?</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/how-to-generate-variable-for-observation-N-based-on-information/m-p/40252#M10417</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;The data step will stop looping when the first SET statement reads the EOF so it does not matter if you add 1 or N extra records to the second SET statement by using no variable dataset. This eliminates the need for the OBS=1 dataset option.&amp;nbsp; This really could make a difference if you want to look ahead more than 1 observation.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 28 Jan 2012 19:28:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/how-to-generate-variable-for-observation-N-based-on-information/m-p/40252#M10417</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2012-01-28T19:28:35Z</dc:date>
    </item>
    <item>
      <title>how to generate variable for observation N based on information from observations &gt; N?</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/how-to-generate-variable-for-observation-N-based-on-information/m-p/40253#M10418</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi, All&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I apologize for late response. And Thank you all very much for great help.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 30 Jan 2012 16:20:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/how-to-generate-variable-for-observation-N-based-on-information/m-p/40253#M10418</guid>
      <dc:creator>littlestone</dc:creator>
      <dc:date>2012-01-30T16:20:15Z</dc:date>
    </item>
  </channel>
</rss>

