<?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: Use do loop index in new variable name in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Use-do-loop-index-in-new-variable-name/m-p/621096#M182544</link>
    <description>&lt;P&gt;This works - thank you all for your replies!&lt;/P&gt;</description>
    <pubDate>Thu, 30 Jan 2020 10:09:58 GMT</pubDate>
    <dc:creator>MarkusB</dc:creator>
    <dc:date>2020-01-30T10:09:58Z</dc:date>
    <item>
      <title>Use do loop index in new variable name</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Use-do-loop-index-in-new-variable-name/m-p/620874#M182484</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm looking for a solution to create new variables using a do loop. The names of the new variables should include the index of the do loop. Here's my example code:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;data have;
input M Q;
datalines;
1   10
2   30
;

data want;
set have;
	do i = 1 to 2;
		if M=i then QM_i=Q;
		else QM_i=0;
	end;
run;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Of course, the program does only generate one new variable QM_i (besides the index variable i) because it does not recognize the index i in the variable name:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;Q&lt;/TD&gt;&lt;TD&gt;i&lt;/TD&gt;&lt;TD&gt;QM_i&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;3&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;2&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Rather, I would like to get:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;M&lt;/TD&gt;&lt;TD&gt;Q&lt;/TD&gt;&lt;TD&gt;i&lt;/TD&gt;&lt;TD&gt;QM_1&lt;/TD&gt;&lt;TD&gt;QM_2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;10&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;10&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;2&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;30&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Any help is greatly appreciated!&lt;/P&gt;</description>
      <pubDate>Wed, 29 Jan 2020 16:34:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Use-do-loop-index-in-new-variable-name/m-p/620874#M182484</guid>
      <dc:creator>MarkusB</dc:creator>
      <dc:date>2020-01-29T16:34:42Z</dc:date>
    </item>
    <item>
      <title>Re: Use do loop index in new variable name</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Use-do-loop-index-in-new-variable-name/m-p/620878#M182486</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/306437"&gt;@MarkusB&lt;/a&gt;&amp;nbsp; I'm afraid you can't quite generate and execute at execution time within a datastep or a SQL. This is where you need the macro processor to get involved and generate the statements at compile time and execute later.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;For example&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;
data have;
input M Q;
datalines;
1   10
2   30
;
%macro t;
data want;
set have;
	%do i = 1 %to 2;
		if M=&amp;amp;i then QM_&amp;amp;i=Q;
		else QM_&amp;amp;i=0;
	%end;
run;
%mend t;

%t&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Wed, 29 Jan 2020 16:39:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Use-do-loop-index-in-new-variable-name/m-p/620878#M182486</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2020-01-29T16:39:53Z</dc:date>
    </item>
    <item>
      <title>Re: Use do loop index in new variable name</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Use-do-loop-index-in-new-variable-name/m-p/620880#M182487</link>
      <description>&lt;P&gt;You have to define and use an array:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
	set have;
	
	array new_vars[2] qm_1 qm_2;
	
	do i = 1 to 2;
		if M=i then new_vars[i]=Q;
		else new_vars[i]=0;
	end;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;EDIT: Renamed variables qm1 =&amp;gt; qm_1 &lt;/P&gt;</description>
      <pubDate>Wed, 29 Jan 2020 16:44:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Use-do-loop-index-in-new-variable-name/m-p/620880#M182487</guid>
      <dc:creator>andreas_lds</dc:creator>
      <dc:date>2020-01-29T16:44:35Z</dc:date>
    </item>
    <item>
      <title>Re: Use do loop index in new variable name</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Use-do-loop-index-in-new-variable-name/m-p/620941#M182496</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/306437"&gt;@MarkusB&lt;/a&gt;: Try this:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have ;                                                                                                                                                                                                                                                     
  input M Q ;                                                                                                                                                                                                                                                   
  cards ;                                                                                                                                                                                                                                                       
1   10                                                                                                                                                                                                                                                          
2   30                                                                                                                                                                                                                                                          
;                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                
data want ;                                                                                                                                                                                                                                                     
  set have ;                                                                                                                                                                                                                                                    
  array qm qm_1 - qm_2 ;                                                                                                                                                                                                                                        
  do over qm ;                                                                                                                                                                                                                                                  
    qm = Q * (_i_ = M) ;                                                                                                                                                                                                                                        
  end ;                                                                                                                                                                                                                                                         
run ;    
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Or, if you don't mind having missing values instead of zeroes, it's even simpler:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want ;                                                                                                                                                                                                                                                     
  set have ;                                                                                                                                                                                                                                                    
  array qm_ [2] ;                                                                                                                                                                                                                                               
  qm_[M] = Q ;                                                                                                                                                                                                                                                  
run ; 
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Kind regards&lt;/P&gt;
&lt;P&gt;Paul D.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 29 Jan 2020 18:55:35 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Use-do-loop-index-in-new-variable-name/m-p/620941#M182496</guid>
      <dc:creator>hashman</dc:creator>
      <dc:date>2020-01-29T18:55:35Z</dc:date>
    </item>
    <item>
      <title>Re: Use do loop index in new variable name</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Use-do-loop-index-in-new-variable-name/m-p/621096#M182544</link>
      <description>&lt;P&gt;This works - thank you all for your replies!&lt;/P&gt;</description>
      <pubDate>Thu, 30 Jan 2020 10:09:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Use-do-loop-index-in-new-variable-name/m-p/621096#M182544</guid>
      <dc:creator>MarkusB</dc:creator>
      <dc:date>2020-01-30T10:09:58Z</dc:date>
    </item>
  </channel>
</rss>

