<?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: Doubts on manipulating dataset and nest it on a macro in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Doubts-on-manipulating-dataset-and-nest-it-on-a-macro/m-p/388470#M277392</link>
    <description>&lt;P&gt;Here's one way.&lt;/P&gt;
&lt;P&gt;Note the example data in the form of a data step so that code can be tested.&lt;/P&gt;
&lt;PRE&gt;data have;
   input ID    INCOME1    INCOME2       INCOME3            VAR_INCOME_TO_UPDATE $           NEW_INCOME_VALUE ;
datalines;
1          100              200                   150                              INCOME2                                            201
2          400              250                   250                              INCOME1                                              99
3          300              210                   165                              INCOME2                                            188
3          800              320                   155                              INCOME2                                            178
;
run;

data want;
   set have;
   array t (3) $8 _temporary_ ('INCOME1', 'INCOME2', 'INCOME3');
   array inc Income1-income3;
   inc(whichc(VAR_INCOME_TO_UPDATE, of t(*)))=New_income_value;
run;&lt;/PRE&gt;
&lt;P&gt;The array t holds the list of values of interest and the array Inc has to have the variables listed in the same order as t.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;the WhichC function finds which character value has the text of interest and returns the number in position order, so can be used as the array inex for Inc.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I'll leave any drop statements to you.&lt;/P&gt;</description>
    <pubDate>Wed, 16 Aug 2017 14:27:53 GMT</pubDate>
    <dc:creator>ballardw</dc:creator>
    <dc:date>2017-08-16T14:27:53Z</dc:date>
    <item>
      <title>Doubts on manipulating dataset and nest it on a macro</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Doubts-on-manipulating-dataset-and-nest-it-on-a-macro/m-p/388463#M277391</link>
      <description>&lt;P&gt;Hello everybody!&lt;/P&gt;&lt;P&gt;I need help, please, as I'm a newbie to SAS.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Imagine this dataset DATASET_ORIGINAL, with the variables:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;ID &amp;nbsp; &amp;nbsp;INCOME1&amp;nbsp; &amp;nbsp; INCOME2 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;INCOME3 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;VAR_INCOME_TO_UPDATE &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;NEW_INCOME_VALUE&lt;/P&gt;&lt;P&gt;-----------------------------------------------------------------------------------------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;1 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;100 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;200 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 150 &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;INCOME2 &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;201&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 400 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;250 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 250 &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;INCOME1&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; 99&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 300 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;210 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 165&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; INCOME2 &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;188&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 800 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;320 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 155 &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;INCOME2 &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;178&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I want to create a new DATASET_COPY, dinamically, by updating, for each ID, the variable whose name is in VAR_INCOME_TO_UPDATE with the NEW_INCOME_VALUE.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The final &lt;SPAN&gt;DATASET_COPY&amp;nbsp;&lt;/SPAN&gt;will be:&lt;/P&gt;&lt;P&gt;ID &amp;nbsp; &amp;nbsp;INCOME1&amp;nbsp; &amp;nbsp; INCOME2 &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;INCOME3 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;------------------------------------------------------------------&lt;/P&gt;&lt;P&gt;1 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;100 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;FONT color="#993300"&gt;&lt;STRONG&gt;201 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/STRONG&gt; &lt;/FONT&gt;150 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;&lt;FONT color="#993300"&gt;99&lt;/FONT&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/STRONG&gt; 250 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;250 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;300 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;STRONG&gt;&lt;FONT color="#993300"&gt;188&lt;/FONT&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/STRONG&gt; 165 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;800 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;STRONG&gt;&lt;FONT color="#993300"&gt;178&lt;/FONT&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/STRONG&gt; 155 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;This is legacy ... And I must keep the logic.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;Thank you very much!&lt;/P&gt;</description>
      <pubDate>Wed, 16 Aug 2017 14:06:19 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Doubts-on-manipulating-dataset-and-nest-it-on-a-macro/m-p/388463#M277391</guid>
      <dc:creator>rmlmrmlm</dc:creator>
      <dc:date>2017-08-16T14:06:19Z</dc:date>
    </item>
    <item>
      <title>Re: Doubts on manipulating dataset and nest it on a macro</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Doubts-on-manipulating-dataset-and-nest-it-on-a-macro/m-p/388470#M277392</link>
      <description>&lt;P&gt;Here's one way.&lt;/P&gt;
&lt;P&gt;Note the example data in the form of a data step so that code can be tested.&lt;/P&gt;
&lt;PRE&gt;data have;
   input ID    INCOME1    INCOME2       INCOME3            VAR_INCOME_TO_UPDATE $           NEW_INCOME_VALUE ;
datalines;
1          100              200                   150                              INCOME2                                            201
2          400              250                   250                              INCOME1                                              99
3          300              210                   165                              INCOME2                                            188
3          800              320                   155                              INCOME2                                            178
;
run;

data want;
   set have;
   array t (3) $8 _temporary_ ('INCOME1', 'INCOME2', 'INCOME3');
   array inc Income1-income3;
   inc(whichc(VAR_INCOME_TO_UPDATE, of t(*)))=New_income_value;
run;&lt;/PRE&gt;
&lt;P&gt;The array t holds the list of values of interest and the array Inc has to have the variables listed in the same order as t.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;the WhichC function finds which character value has the text of interest and returns the number in position order, so can be used as the array inex for Inc.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I'll leave any drop statements to you.&lt;/P&gt;</description>
      <pubDate>Wed, 16 Aug 2017 14:27:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Doubts-on-manipulating-dataset-and-nest-it-on-a-macro/m-p/388470#M277392</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2017-08-16T14:27:53Z</dc:date>
    </item>
    <item>
      <title>Re: Doubts on manipulating dataset and nest it on a macro</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Doubts-on-manipulating-dataset-and-nest-it-on-a-macro/m-p/388471#M277393</link>
      <description>&lt;P&gt;No macro needed.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Something like&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;if var_income_to_update='INCOME1' then ... ;
else if var_income_to_update='INCOME2' then ...;&lt;/PRE&gt;</description>
      <pubDate>Wed, 16 Aug 2017 14:29:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Doubts-on-manipulating-dataset-and-nest-it-on-a-macro/m-p/388471#M277393</guid>
      <dc:creator>PaigeMiller</dc:creator>
      <dc:date>2017-08-16T14:29:03Z</dc:date>
    </item>
    <item>
      <title>Re: Doubts on manipulating dataset and nest it on a macro</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Doubts-on-manipulating-dataset-and-nest-it-on-a-macro/m-p/388483#M277394</link>
      <description>&lt;P&gt;or even this?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;data DATASET_ORIGINAL;
input ID INCOME1 INCOME2 INCOME3 VAR_INCOME_TO_UPDATE $ NEW_INCOME_VALUE;
datalines;
1 100 200 150 INCOME2 201
2 400 250 250 INCOME1  99
3 300 210 165 INCOME2 188
3 800 320 155 INCOME2 178
;
run;
data DATASET_COPY(keep=id income:); 
	set DATASET_ORIGINAL;
	array INCOME{3};
	do i=1 to 3; 
		if VAR_INCOME_TO_UPDATE=vname(INCOME{i}) then INCOME{i}=NEW_INCOME_VALUE;
	end;
run;
proc print noobs; run;&lt;/PRE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 16 Aug 2017 14:49:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Doubts-on-manipulating-dataset-and-nest-it-on-a-macro/m-p/388483#M277394</guid>
      <dc:creator>Miracle</dc:creator>
      <dc:date>2017-08-16T14:49:59Z</dc:date>
    </item>
    <item>
      <title>Re: Doubts on manipulating dataset and nest it on a macro</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Doubts-on-manipulating-dataset-and-nest-it-on-a-macro/m-p/388487#M277395</link>
      <description>&lt;PRE&gt;

data have;
   input ID    INCOME1    INCOME2       INCOME3            VAR_INCOME_TO_UPDATE $           NEW_INCOME_VALUE ;
datalines;
1          100              200                   150                              INCOME2                                            201
2          400              250                   250                              INCOME1                                              99
3          300              210                   165                              INCOME2                                            188
3          800              320                   155                              INCOME2                                            178
;
run;

data want;
   set have;
   array x{*} Income1-income3;
   do i=1 to dim(x);
    if upcase(VAR_INCOME_TO_UPDATE)=upcase(vname(x{i})) then do;
      x{i}=NEW_INCOME_VALUE;leave;
	end;
   end;
   drop i;
run;

&lt;/PRE&gt;</description>
      <pubDate>Wed, 16 Aug 2017 14:54:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Doubts-on-manipulating-dataset-and-nest-it-on-a-macro/m-p/388487#M277395</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2017-08-16T14:54:12Z</dc:date>
    </item>
  </channel>
</rss>

