<?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: Problem correctly resolving Lag&amp;var in a macro in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Problem-correctly-resolving-Lag-var-in-a-macro/m-p/136411#M27635</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;Thanks for your quick responses.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I think i have simplified my problem a little too much. In my original post i was useing these 2 variables as an exmaple: "response_sum" and&amp;nbsp; "for_m3". In reality, "response_sum" is 1 of 17 variables i need to create. and "form_m3" is 1 of 4 lag values (lag1, lag2, lag3 and lag12).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The conditional If statement works well for 1 lag for 1 variable but i was looking for something a little more succinct and compact. Here is the extended / complete macro code (apologies for not having the code toe create the test data).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;%macro lagit(lag_num);&lt;BR /&gt;%do b=1 %to &amp;amp;obs_for_macro.;&lt;BR /&gt; mailed_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(mailed_sum);&lt;BR /&gt; response_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(response_sum);&lt;BR /&gt; conversion_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(conversion_sum);&lt;/P&gt;&lt;P&gt; medium_na_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(medium_NA_sum);&lt;BR /&gt; medium_pc_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(medium_PC_sum);&lt;BR /&gt; medium_letter_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(medium_Letter_sum);&lt;BR /&gt; medium_email_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(medium_Email_sum);&lt;BR /&gt; medium_SMS_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(medium_SMS_sum);&lt;BR /&gt; medium_Call_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(medium_Call_sum);&lt;BR /&gt; medium_Other_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(medium_Other_sum); &lt;/P&gt;&lt;P&gt; gender_male_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(gender_Male_sum);&lt;BR /&gt; gender_female_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(gender_Female_sum);&lt;BR /&gt; gender_unknown_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(gender_Unknown_sum);&lt;/P&gt;&lt;P&gt; Total_Pack_Cost_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(Total_Pack_Cost);&lt;BR /&gt; Conversion_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(Conversion_sum);&lt;BR /&gt;%end;&lt;BR /&gt; if for_m&amp;amp;lag_num.=0 then &lt;BR /&gt;&amp;nbsp; do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; mailed_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; response_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; conversion_lag&amp;amp;lag_num.=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; medium_na_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; medium_pc_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; medium_letter_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; medium_email_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; medium_SMS_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; medium_Call_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; medium_Other_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp; gender_male_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; gender_female_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; gender_unknown_lag&amp;amp;lag_num.=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; Total_Pack_Cost_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Conversion_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp; end;&lt;BR /&gt;%mend;&lt;/P&gt;&lt;P&gt;%macro L3m();&lt;BR /&gt;data test_data_lag;&lt;BR /&gt;set test_data;&lt;BR /&gt;%lagit(1);&lt;BR /&gt;%lagit(2);&lt;BR /&gt;%lagit(3);&lt;BR /&gt;%lagit(12);&lt;BR /&gt;run;&lt;BR /&gt;%mend l3m;&lt;/P&gt;&lt;P&gt;%L3m();&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks again...&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 11 Nov 2013 10:27:40 GMT</pubDate>
    <dc:creator>Sharpshooter</dc:creator>
    <dc:date>2013-11-11T10:27:40Z</dc:date>
    <item>
      <title>Problem correctly resolving Lag&amp;var in a macro</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Problem-correctly-resolving-Lag-var-in-a-macro/m-p/136406#M27630</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;BR /&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I'm having real problems correctly creating a value using Lag through a macro.Below is the code and some test data.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I want to lag the response_sum field by the value in the field "for_m3". Using line 14 as an example, I want to resolve to a value of lag2 (which should equal 3426). But instead it puts the value 4001. The log shows this:&lt;/P&gt;&lt;P&gt;MPRINT(LAGIT):&amp;nbsp;&amp;nbsp; response_lag3=lag2(response_sum);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;So I would reasonably expect the value in response_lag3 to be 3426 - but it's 4001&lt;/P&gt;&lt;P&gt; &lt;BR /&gt;data test_data;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; length month 3. response_sum 8. for_m3 8. ;&lt;BR /&gt;&amp;nbsp; infile datalines delimiter=','; &lt;BR /&gt;&amp;nbsp;&amp;nbsp; input month response_sum for_m3 ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; datalines;&lt;BR /&gt;1,4877,0&lt;BR /&gt;2,8388,0&lt;BR /&gt;3,8766,0&lt;BR /&gt;4,8491,3&lt;BR /&gt;5,6953,3&lt;BR /&gt;6,4823,3&lt;BR /&gt;7,5761,3&lt;BR /&gt;8,7638,3&lt;BR /&gt;9,5613,3&lt;BR /&gt;10,4258,3&lt;BR /&gt;11,4001,3&lt;BR /&gt;12,3426,3&lt;BR /&gt;13,1414,2&lt;BR /&gt;14,1347,2&lt;BR /&gt;15,1117,0&lt;BR /&gt;16,663,3&lt;BR /&gt;;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;proc sort test_data;&lt;BR /&gt;by month;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;%macro lagit(lag_num);&lt;BR /&gt;%do b=1 %to &amp;amp;obs_for_macro.;&lt;BR /&gt; response_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(response_sum);&lt;BR /&gt;%end;&lt;/P&gt;&lt;P&gt; if for_m&amp;amp;lag_num.=0 then &lt;BR /&gt;&amp;nbsp; do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; response_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;%mend ;&lt;/P&gt;&lt;P&gt;data _null_;&lt;BR /&gt;set test_data;&lt;BR /&gt;by month;&lt;BR /&gt;call symput("for_m3_"||left(_n_),compress(for_m3));&lt;BR /&gt;if last.month then call symput("obs_for_macro",left(_n_));&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;%macro L3m();&lt;BR /&gt;data test_data_lag;&lt;BR /&gt;set test_data;&lt;BR /&gt;%lagit(3);&lt;/P&gt;&lt;P&gt;run;&lt;BR /&gt;%mend l3m;&lt;/P&gt;&lt;P&gt;%L3m();&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks in advance for your help.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 08 Nov 2013 17:09:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Problem-correctly-resolving-Lag-var-in-a-macro/m-p/136406#M27630</guid>
      <dc:creator>Sharpshooter</dc:creator>
      <dc:date>2013-11-08T17:09:20Z</dc:date>
    </item>
    <item>
      <title>Re: Problem correctly resolving Lag&amp;var in a macro</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Problem-correctly-resolving-Lag-var-in-a-macro/m-p/136407#M27631</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Running your code (after coding the "data=" in the sort) showed:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;MPRINT(L3M):&amp;nbsp;&amp;nbsp; data test_data_lag;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;MPRINT(L3M):&amp;nbsp;&amp;nbsp; set test_data;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;MPRINT(LAGIT):&amp;nbsp;&amp;nbsp; response_lag3=lag0(response_sum);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;MPRINT(LAGIT):&amp;nbsp;&amp;nbsp; response_lag3=lag0(response_sum);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;MPRINT(LAGIT):&amp;nbsp;&amp;nbsp; response_lag3=lag0(response_sum);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;MPRINT(LAGIT):&amp;nbsp;&amp;nbsp; response_lag3=lag3(response_sum);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;MPRINT(LAGIT):&amp;nbsp;&amp;nbsp; response_lag3=lag3(response_sum);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;MPRINT(LAGIT):&amp;nbsp;&amp;nbsp; response_lag3=lag3(response_sum);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;MPRINT(LAGIT):&amp;nbsp;&amp;nbsp; response_lag3=lag3(response_sum);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;MPRINT(LAGIT):&amp;nbsp;&amp;nbsp; response_lag3=lag3(response_sum);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;MPRINT(LAGIT):&amp;nbsp;&amp;nbsp; response_lag3=lag3(response_sum);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;MPRINT(LAGIT):&amp;nbsp;&amp;nbsp; response_lag3=lag3(response_sum);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;MPRINT(LAGIT):&amp;nbsp;&amp;nbsp; response_lag3=lag3(response_sum);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;MPRINT(LAGIT):&amp;nbsp;&amp;nbsp; response_lag3=lag3(response_sum);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;MPRINT(LAGIT):&amp;nbsp;&amp;nbsp; response_lag3=lag2(response_sum);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;MPRINT(LAGIT):&amp;nbsp;&amp;nbsp; response_lag3=lag2(response_sum);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;MPRINT(LAGIT):&amp;nbsp;&amp;nbsp; response_lag3=lag0(response_sum);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;MPRINT(LAGIT):&amp;nbsp;&amp;nbsp; response_lag3=lag3(response_sum);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;MPRINT(LAGIT):&amp;nbsp;&amp;nbsp; if for_m3=0 then do;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;MPRINT(LAGIT):&amp;nbsp;&amp;nbsp; response_lag3=0;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;MPRINT(LAGIT):&amp;nbsp;&amp;nbsp; end;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;MPRINT(L3M):&amp;nbsp; ;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;MPRINT(L3M):&amp;nbsp;&amp;nbsp; run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I assume you just wanted one assignment to &lt;SPAN style="font-family: 'courier new', courier;"&gt;response_lag3&lt;/SPAN&gt; for each observation.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Each observation on your input data set passes through all of your data step statements, then the data step outputs the result and moves on to the next observation.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;From what is shown, "&lt;SPAN style="font-family: 'courier new', courier;"&gt;response_lag3=lag3(response_sum)&lt;/SPAN&gt;" is the last assignment used to assign a value to &lt;SPAN style="font-family: 'courier new', courier;"&gt;response_lag3&lt;/SPAN&gt;, unless the &lt;SPAN style="font-family: 'courier new', courier;"&gt;if&lt;/SPAN&gt; condition at the end is satisfied. That is why you are seeing 4001.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Regards,&lt;/P&gt;&lt;P&gt;Amir.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Message was edited by: Amir Malik - rephrased last sentence.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 08 Nov 2013 18:25:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Problem-correctly-resolving-Lag-var-in-a-macro/m-p/136407#M27631</guid>
      <dc:creator>Amir</dc:creator>
      <dc:date>2013-11-08T18:25:13Z</dc:date>
    </item>
    <item>
      <title>Re: Problem correctly resolving Lag&amp;var in a macro</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Problem-correctly-resolving-Lag-var-in-a-macro/m-p/136408#M27632</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Just reading the problem briefly, it looks like you are making this much too complicated.&amp;nbsp; Macro langauge shouldn't be needed.&amp;nbsp; LAG is more complicated than it looks, so just compute the lags and use IF/THEN to select what you need.&amp;nbsp; For example:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;back1 = lag(response_sum);&lt;/P&gt;&lt;P&gt;back2 = lag2(response_sum);&lt;/P&gt;&lt;P&gt;back3 = lag3(response_sum);&lt;/P&gt;&lt;P&gt;drop back1 back2 back3;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Then follow up with something like:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;if for_m3=3 then lagged_value = back3;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Is your objective really any more complex than that?&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 08 Nov 2013 22:33:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Problem-correctly-resolving-Lag-var-in-a-macro/m-p/136408#M27632</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2013-11-08T22:33:32Z</dc:date>
    </item>
    <item>
      <title>Re: Problem correctly resolving Lag&amp;var in a macro</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Problem-correctly-resolving-Lag-var-in-a-macro/m-p/136409#M27633</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Doesn't feel like something you should have to use macro language for. If I've understood correctly what you're after then below code should do.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data test_data;&lt;BR /&gt;&amp;nbsp; length month 3. response_sum 8. for_m3 8.;&lt;BR /&gt;&amp;nbsp; infile datalines delimiter=',';&lt;BR /&gt;&amp;nbsp; input month response_sum for_m3;&lt;BR /&gt;&amp;nbsp; datalines;&lt;BR /&gt;1,4877,0&lt;BR /&gt;2,8388,0&lt;BR /&gt;3,8766,0&lt;BR /&gt;4,8491,3&lt;BR /&gt;5,6953,3&lt;BR /&gt;6,4823,3&lt;BR /&gt;7,5761,3&lt;BR /&gt;8,7638,3&lt;BR /&gt;9,5613,3&lt;BR /&gt;10,4258,3&lt;BR /&gt;11,4001,3&lt;BR /&gt;12,3426,3&lt;BR /&gt;13,1414,2&lt;BR /&gt;14,1347,2&lt;BR /&gt;15,1117,0&lt;BR /&gt;16,663,3&lt;BR /&gt;;&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;data want;&lt;BR /&gt;&amp;nbsp; set test_data;&lt;BR /&gt;&amp;nbsp; by month;&lt;/P&gt;&lt;P&gt;&amp;nbsp; _select_row = _n_ - for_m3;&lt;BR /&gt;&amp;nbsp; if 1 &amp;lt;= _select_row &amp;lt;= _nobs then&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set test_data(keep=response_sum rename=(response_sum=response_lag)) point=_select_row nobs=_nobs;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;BR /&gt;&amp;nbsp; else call missing(response_lag);&lt;BR /&gt;run;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 09 Nov 2013 05:58:55 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Problem-correctly-resolving-Lag-var-in-a-macro/m-p/136409#M27633</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2013-11-09T05:58:55Z</dc:date>
    </item>
    <item>
      <title>Re: Problem correctly resolving Lag&amp;var in a macro</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Problem-correctly-resolving-Lag-var-in-a-macro/m-p/136410#M27634</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Macro is for generating code that is then compiled and run.&amp;nbsp; You cannot use it to reference values of dataset variables during run time.&amp;nbsp; Conditionally selecting a value from a list using the value of another variable as an index is why SAS has the ARRAY construct.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;data want ;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; set ;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; array back (3) _temporary_;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; back(1) = lag(response_sum);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; back(2) = lag2(response_sum);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; back(3) = lag3(response_sum);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; if 1 &amp;lt;= for_m3 &amp;lt;=3 then lag_response_sum = back(for_m3);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; else lag_response_sum = 0;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;run;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&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;&amp;nbsp; response_&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; lag_response_&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;Obs&amp;nbsp;&amp;nbsp;&amp;nbsp; month&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sum&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for_m3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sum&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4877&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&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; 0&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8388&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&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; 0&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8766&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&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; 0&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8491&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4877&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; 5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6953&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8388&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; 6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4823&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8766&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; 7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5761&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8491&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; 8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7638&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6953&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;&amp;nbsp; 9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5613&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4823&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4258&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5761&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7638&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3426&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5613&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1414&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4001&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1347&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3426&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;15&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 15&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1117&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&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; 0&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="font-family: 'courier new', courier;"&gt;16&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 16&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 663&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1414&lt;/SPAN&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 09 Nov 2013 22:15:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Problem-correctly-resolving-Lag-var-in-a-macro/m-p/136410#M27634</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2013-11-09T22:15:31Z</dc:date>
    </item>
    <item>
      <title>Re: Problem correctly resolving Lag&amp;var in a macro</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Problem-correctly-resolving-Lag-var-in-a-macro/m-p/136411#M27635</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;Thanks for your quick responses.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I think i have simplified my problem a little too much. In my original post i was useing these 2 variables as an exmaple: "response_sum" and&amp;nbsp; "for_m3". In reality, "response_sum" is 1 of 17 variables i need to create. and "form_m3" is 1 of 4 lag values (lag1, lag2, lag3 and lag12).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;The conditional If statement works well for 1 lag for 1 variable but i was looking for something a little more succinct and compact. Here is the extended / complete macro code (apologies for not having the code toe create the test data).&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;%macro lagit(lag_num);&lt;BR /&gt;%do b=1 %to &amp;amp;obs_for_macro.;&lt;BR /&gt; mailed_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(mailed_sum);&lt;BR /&gt; response_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(response_sum);&lt;BR /&gt; conversion_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(conversion_sum);&lt;/P&gt;&lt;P&gt; medium_na_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(medium_NA_sum);&lt;BR /&gt; medium_pc_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(medium_PC_sum);&lt;BR /&gt; medium_letter_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(medium_Letter_sum);&lt;BR /&gt; medium_email_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(medium_Email_sum);&lt;BR /&gt; medium_SMS_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(medium_SMS_sum);&lt;BR /&gt; medium_Call_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(medium_Call_sum);&lt;BR /&gt; medium_Other_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(medium_Other_sum); &lt;/P&gt;&lt;P&gt; gender_male_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(gender_Male_sum);&lt;BR /&gt; gender_female_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(gender_Female_sum);&lt;BR /&gt; gender_unknown_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(gender_Unknown_sum);&lt;/P&gt;&lt;P&gt; Total_Pack_Cost_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(Total_Pack_Cost);&lt;BR /&gt; Conversion_lag&amp;amp;lag_num.=lag&amp;amp;&amp;amp;for_m&amp;amp;lag_num._&amp;amp;b.(Conversion_sum);&lt;BR /&gt;%end;&lt;BR /&gt; if for_m&amp;amp;lag_num.=0 then &lt;BR /&gt;&amp;nbsp; do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; mailed_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; response_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; conversion_lag&amp;amp;lag_num.=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; medium_na_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; medium_pc_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; medium_letter_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; medium_email_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; medium_SMS_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; medium_Call_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; medium_Other_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp;&amp;nbsp; gender_male_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; gender_female_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; gender_unknown_lag&amp;amp;lag_num.=0;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; Total_Pack_Cost_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; Conversion_lag&amp;amp;lag_num.=0;&lt;BR /&gt;&amp;nbsp; end;&lt;BR /&gt;%mend;&lt;/P&gt;&lt;P&gt;%macro L3m();&lt;BR /&gt;data test_data_lag;&lt;BR /&gt;set test_data;&lt;BR /&gt;%lagit(1);&lt;BR /&gt;%lagit(2);&lt;BR /&gt;%lagit(3);&lt;BR /&gt;%lagit(12);&lt;BR /&gt;run;&lt;BR /&gt;%mend l3m;&lt;/P&gt;&lt;P&gt;%L3m();&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks again...&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 11 Nov 2013 10:27:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Problem-correctly-resolving-Lag-var-in-a-macro/m-p/136411#M27635</guid>
      <dc:creator>Sharpshooter</dc:creator>
      <dc:date>2013-11-11T10:27:40Z</dc:date>
    </item>
    <item>
      <title>Re: Problem correctly resolving Lag&amp;var in a macro</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Problem-correctly-resolving-Lag-var-in-a-macro/m-p/136412#M27636</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I believe you could use the code I've previously posted and simply add the additional variables to the rename statement.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;As I understand you also in your real data there is still only one variable used to store how many rows backwards relative to the current row you have to read all these "lag" data from. So why not just use this variable and actually go and read the values from this row. In doing so you don't have to create all these lag() variables and you don't need to know in advance all the possible "lags".&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 11 Nov 2013 21:16:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Problem-correctly-resolving-Lag-var-in-a-macro/m-p/136412#M27636</guid>
      <dc:creator>Patrick</dc:creator>
      <dc:date>2013-11-11T21:16:25Z</dc:date>
    </item>
    <item>
      <title>Re: Problem correctly resolving Lag&amp;var in a macro</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Problem-correctly-resolving-Lag-var-in-a-macro/m-p/136413#M27637</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;&lt;BR /&gt;Thanks for all the help. Finally settled on the following code:&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;%macro lag_months(time,var,var_new);&lt;BR /&gt;array back_&amp;amp;time._ (12) _temporary_ ;&lt;BR /&gt;back_&amp;amp;time._(1)=lag1(&amp;amp;var.);&lt;BR /&gt;back_&amp;amp;time._(2)=lag2(&amp;amp;var.);&lt;BR /&gt;back_&amp;amp;time._(3)=lag3(&amp;amp;var.);&lt;BR /&gt;back_&amp;amp;time._(4)=lag4(&amp;amp;var.);&lt;BR /&gt;back_&amp;amp;time._(5)=lag5(&amp;amp;var.);&lt;BR /&gt;back_&amp;amp;time._(6)=lag6(&amp;amp;var.);&lt;BR /&gt;back_&amp;amp;time._(7)=lag7(&amp;amp;var.);&lt;BR /&gt;back_&amp;amp;time._(8)=lag8(&amp;amp;var.);&lt;BR /&gt;back_&amp;amp;time._(9)=lag9(&amp;amp;var.);&lt;BR /&gt;back_&amp;amp;time._(10)=lag10(&amp;amp;var.);&lt;BR /&gt;back_&amp;amp;time._(11)=lag11(&amp;amp;var.);&lt;BR /&gt;back_&amp;amp;time._(12)=lag12(&amp;amp;var.);&lt;/P&gt;&lt;P&gt;if 1 &amp;lt;= for_m1 &amp;lt;= 1 then &lt;BR /&gt; do;&lt;BR /&gt;&amp;nbsp; &amp;amp;var_new._lag1 = back_&amp;amp;time._(for_m1);&lt;BR /&gt; end;&lt;BR /&gt;else &amp;amp;var_new._lag1 = 0;&lt;BR /&gt;if 1 &amp;lt;= for_m2 &amp;lt;= 2 then &lt;BR /&gt; do;&lt;BR /&gt;&amp;nbsp; &amp;amp;var_new._lag2 = back_&amp;amp;time._(for_m2);&lt;BR /&gt; end;&lt;BR /&gt;else &amp;amp;var_new._lag2 = 0;&lt;BR /&gt;if 1 &amp;lt;= for_m3 &amp;lt;= 3 then&lt;BR /&gt; do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;amp;var_new._lag3 = back_&amp;amp;time._(for_m3);&lt;BR /&gt; end;&lt;BR /&gt;else &amp;amp;var_new._lag3 = 0;&lt;BR /&gt;if 1 &amp;lt;= for_m12 &amp;lt;= 12 then&lt;BR /&gt; do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;amp;var_new._lag12 = back_&amp;amp;time._(for_m12);&lt;BR /&gt; end;&lt;BR /&gt;else &amp;amp;var_new._lag12 = 0;&lt;BR /&gt;%mend;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 12 Nov 2013 15:05:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Problem-correctly-resolving-Lag-var-in-a-macro/m-p/136413#M27637</guid>
      <dc:creator>Sharpshooter</dc:creator>
      <dc:date>2013-11-12T15:05:44Z</dc:date>
    </item>
  </channel>
</rss>

