<?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: lag variable with by function of two parameters in SAS Procedures</title>
    <link>https://communities.sas.com/t5/SAS-Procedures/lag-variable-with-by-function-of-two-parameters/m-p/843035#M82225</link>
    <description>&lt;P&gt;It looks like you should use first.program_code in place of first.permno.&lt;/P&gt;</description>
    <pubDate>Tue, 08 Nov 2022 06:26:52 GMT</pubDate>
    <dc:creator>Kurt_Bremser</dc:creator>
    <dc:date>2022-11-08T06:26:52Z</dc:date>
    <item>
      <title>lag variable with by function of two parameters</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/lag-variable-with-by-function-of-two-parameters/m-p/843027#M82222</link>
      <description>&lt;P&gt;Dear All,&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I was trying to create a new variable ， called lag_ar.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;here is my original dataset:&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;PERMNO&lt;/TD&gt;&lt;TD&gt;EVTDATE&lt;/TD&gt;&lt;TD&gt;EVTTIME&lt;/TD&gt;&lt;TD&gt;cumulative_ar&lt;/TD&gt;&lt;TD&gt;program_code&lt;/TD&gt;&lt;TD&gt;counter_overall&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10001&lt;/TD&gt;&lt;TD&gt;8/1/11&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;0.933284&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10001&lt;/TD&gt;&lt;TD&gt;4/2/12&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;0.98016&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10002&lt;/TD&gt;&lt;TD&gt;7/6/98&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;1.14444&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10002&lt;/TD&gt;&lt;TD&gt;10/27/98&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;0.947167&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10020&lt;/TD&gt;&lt;TD&gt;4/6/87&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;1.003912&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10020&lt;/TD&gt;&lt;TD&gt;10/21/87&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;0.898007&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10020&lt;/TD&gt;&lt;TD&gt;12/11/87&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;1.032888&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10020&lt;/TD&gt;&lt;TD&gt;4/17/90&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;1.023325&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10020&lt;/TD&gt;&lt;TD&gt;4/24/90&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;1.063576&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;my code is&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;proc sort data = datasetname;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;by permno evtdate program_code;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;run;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;data within_lag;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;set within;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;by &amp;nbsp;permno evtdate program_code;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;cum_ar_lag1 = ifn(not(first.permno),lag(&lt;/SPAN&gt;&lt;SPAN&gt;cumulative_ar),.);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;but with my code, the result is not right;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;take permno 10020 for example,&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;my code gives the result as below:&lt;/SPAN&gt;&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;10020&lt;/TD&gt;&lt;TD&gt;4/6/87&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;1.003912&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10020&lt;/TD&gt;&lt;TD&gt;10/21/87&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;0.898007&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1.003912&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10020&lt;/TD&gt;&lt;TD&gt;12/11/87&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;1.032888&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;0.898007&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10020&lt;/TD&gt;&lt;TD&gt;4/17/90&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;1.023325&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1.032888&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10020&lt;/TD&gt;&lt;TD&gt;4/24/90&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;1.063576&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1.023325&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;however, for the 4th obs, the lag_ar should be ".", but it still grab the value from the 3rd observation. however, they are not in the same program code, which it should not grab the value and assign it there.&lt;/P&gt;&lt;P&gt;the right result I expect is as below:&lt;/P&gt;&lt;P&gt;the lag is supposed to do within same permno and same program_code.&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;PERMNO&lt;/TD&gt;&lt;TD&gt;EVTDATE&lt;/TD&gt;&lt;TD&gt;EVTTIME&lt;/TD&gt;&lt;TD&gt;cumulative_ar&lt;/TD&gt;&lt;TD&gt;program_code&lt;/TD&gt;&lt;TD&gt;counter_overall&lt;/TD&gt;&lt;TD&gt;lag_ar&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10020&lt;/TD&gt;&lt;TD&gt;4/6/87&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;1.003912&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10020&lt;/TD&gt;&lt;TD&gt;10/21/87&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;0.898007&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1.003912&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10020&lt;/TD&gt;&lt;TD&gt;12/11/87&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;1.032888&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;0.898007&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10020&lt;/TD&gt;&lt;TD&gt;4/17/90&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;1.023325&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;10020&lt;/TD&gt;&lt;TD&gt;4/24/90&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;1.063576&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1.023325&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I know I can fix my wrong result by assign a missing value to all obs that counter_overall is 1, but I really want to figure out why my&amp;nbsp;&lt;/P&gt;&lt;P&gt;by statement does not work.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you so much again.&lt;/P&gt;&lt;P&gt;Zhongda&lt;/P&gt;</description>
      <pubDate>Tue, 08 Nov 2022 02:52:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/lag-variable-with-by-function-of-two-parameters/m-p/843027#M82222</guid>
      <dc:creator>Zhongda</dc:creator>
      <dc:date>2022-11-08T02:52:22Z</dc:date>
    </item>
    <item>
      <title>Re: lag variable with by function of two parameters</title>
      <link>https://communities.sas.com/t5/SAS-Procedures/lag-variable-with-by-function-of-two-parameters/m-p/843035#M82225</link>
      <description>&lt;P&gt;It looks like you should use first.program_code in place of first.permno.&lt;/P&gt;</description>
      <pubDate>Tue, 08 Nov 2022 06:26:52 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Procedures/lag-variable-with-by-function-of-two-parameters/m-p/843035#M82225</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2022-11-08T06:26:52Z</dc:date>
    </item>
  </channel>
</rss>

