<?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 Macro to Parse Multiple Variables Multiple Times? in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Macro-to-Parse-Multiple-Variables-Multiple-Times/m-p/447957#M112612</link>
    <description>&lt;P&gt;I have a data set that contains participant data for multiple months. The data for each month contains a string of data that I want to parse out into different variables. The data within the string changes from month to month.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;ID&amp;nbsp; &amp;nbsp; &amp;nbsp;Jan17&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;Feb17&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; Mar17&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;I - 2 - 0 - 056 - 0029 - 22 - 561&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; C - 4 - 0 - 056 - 0029 - 22 - 561&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;C - 4 - 1 - 056 - 0029 - 22 - 561&lt;/P&gt;&lt;P&gt;2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;P - 4 - 23 - 056 - 0029 - 22 - 561&amp;nbsp; &amp;nbsp; &amp;nbsp;P - 4 - 23 - 056 - 0016 - 22 - 561&amp;nbsp; &amp;nbsp; &amp;nbsp;B - 1 - 23 - 056 - 0016 - 22 - 561&lt;/P&gt;&lt;P&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;P - 4 - 33 - 007 - 0140 - 03 - 071&amp;nbsp; &amp;nbsp; &amp;nbsp;N - 4 - 33 - 007 - 0140 - 03 - 071&amp;nbsp; &amp;nbsp; &amp;nbsp;N - 4 - 33 - 007 - 0140 - 03 - 071&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I wrote&amp;nbsp;an array that will parse the string from a single month, but I can't figure&amp;nbsp;a macro that will run for every month and create the output variables to include the month it is from.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;array STRING(*)  var1 var2 var3 var4 var5 var6 var7 _char_;
i=1;
do while(scan(Jan17, i, " - ") ne "");
STRING(i) =scan(Jan17, i, " - ");
i+1;
end;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Hopefully it would look something like this. I will have a ton of columns, but I can't think of a better way to do it.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;ID&amp;nbsp; &amp;nbsp; &amp;nbsp;Jan17var1&amp;nbsp; &amp;nbsp; &amp;nbsp;Jan17var2&amp;nbsp; &amp;nbsp; &amp;nbsp;Jan17var3&amp;nbsp; &amp;nbsp; &amp;nbsp;Jan17var4&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; I&amp;nbsp; &amp;nbsp; &amp;nbsp; &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; 0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 056&lt;/P&gt;&lt;P&gt;2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; P&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &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; &amp;nbsp; &amp;nbsp; &amp;nbsp;23&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;056&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; P&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &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; &amp;nbsp; &amp;nbsp; &amp;nbsp;33&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;007&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;</description>
    <pubDate>Thu, 22 Mar 2018 21:11:27 GMT</pubDate>
    <dc:creator>EHealy</dc:creator>
    <dc:date>2018-03-22T21:11:27Z</dc:date>
    <item>
      <title>Macro to Parse Multiple Variables Multiple Times?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-to-Parse-Multiple-Variables-Multiple-Times/m-p/447957#M112612</link>
      <description>&lt;P&gt;I have a data set that contains participant data for multiple months. The data for each month contains a string of data that I want to parse out into different variables. The data within the string changes from month to month.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;ID&amp;nbsp; &amp;nbsp; &amp;nbsp;Jan17&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;Feb17&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; Mar17&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;I - 2 - 0 - 056 - 0029 - 22 - 561&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; C - 4 - 0 - 056 - 0029 - 22 - 561&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;C - 4 - 1 - 056 - 0029 - 22 - 561&lt;/P&gt;&lt;P&gt;2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;P - 4 - 23 - 056 - 0029 - 22 - 561&amp;nbsp; &amp;nbsp; &amp;nbsp;P - 4 - 23 - 056 - 0016 - 22 - 561&amp;nbsp; &amp;nbsp; &amp;nbsp;B - 1 - 23 - 056 - 0016 - 22 - 561&lt;/P&gt;&lt;P&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;P - 4 - 33 - 007 - 0140 - 03 - 071&amp;nbsp; &amp;nbsp; &amp;nbsp;N - 4 - 33 - 007 - 0140 - 03 - 071&amp;nbsp; &amp;nbsp; &amp;nbsp;N - 4 - 33 - 007 - 0140 - 03 - 071&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I wrote&amp;nbsp;an array that will parse the string from a single month, but I can't figure&amp;nbsp;a macro that will run for every month and create the output variables to include the month it is from.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;array STRING(*)  var1 var2 var3 var4 var5 var6 var7 _char_;
i=1;
do while(scan(Jan17, i, " - ") ne "");
STRING(i) =scan(Jan17, i, " - ");
i+1;
end;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;Hopefully it would look something like this. I will have a ton of columns, but I can't think of a better way to do it.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;ID&amp;nbsp; &amp;nbsp; &amp;nbsp;Jan17var1&amp;nbsp; &amp;nbsp; &amp;nbsp;Jan17var2&amp;nbsp; &amp;nbsp; &amp;nbsp;Jan17var3&amp;nbsp; &amp;nbsp; &amp;nbsp;Jan17var4&lt;/P&gt;&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; I&amp;nbsp; &amp;nbsp; &amp;nbsp; &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; 0&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 056&lt;/P&gt;&lt;P&gt;2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; P&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &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; &amp;nbsp; &amp;nbsp; &amp;nbsp;23&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;056&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; P&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &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; &amp;nbsp; &amp;nbsp; &amp;nbsp;33&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;007&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;</description>
      <pubDate>Thu, 22 Mar 2018 21:11:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-to-Parse-Multiple-Variables-Multiple-Times/m-p/447957#M112612</guid>
      <dc:creator>EHealy</dc:creator>
      <dc:date>2018-03-22T21:11:27Z</dc:date>
    </item>
    <item>
      <title>Re: Macro to Parse Multiple Variables Multiple Times?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-to-Parse-Multiple-Variables-Multiple-Times/m-p/447971#M112618</link>
      <description>&lt;P&gt;Thoughts to consider ...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It would be&amp;nbsp;better if the data had never been put together like that.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It would be better if you kept a separate observation for each ID/Month, instead of a single observation per ID.&amp;nbsp; You would need to learn programming techniques to work with the data in that form but that is well worth doing.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;SCAN is perfectly fine, but the ARRAY statement is suspect.&amp;nbsp; It looks like&amp;nbsp;you are trying to define the array variables as character by adding _char_ at the end.&amp;nbsp; The right way to do that would be:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;SPAN class="token statement"&gt;array&lt;/SPAN&gt; STRING&lt;SPAN class="token punctuation"&gt;(&lt;/SPAN&gt;&lt;SPAN class="token operator"&gt;*&lt;/SPAN&gt;&lt;SPAN class="token punctuation"&gt;)&lt;/SPAN&gt;&amp;nbsp; &lt;FONT color="#339966"&gt;$&lt;/FONT&gt; var1 var2 var3 var4 var5 var6 var7&lt;SPAN class="token punctuation"&gt;;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 22 Mar 2018 21:38:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-to-Parse-Multiple-Variables-Multiple-Times/m-p/447971#M112618</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2018-03-22T21:38:06Z</dc:date>
    </item>
    <item>
      <title>Re: Macro to Parse Multiple Variables Multiple Times?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-to-Parse-Multiple-Variables-Multiple-Times/m-p/447975#M112620</link>
      <description>&lt;P&gt;I suggest transposing the dataset to make it long, then applying your code, and finally transposing it again to make it wide.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;For the last step, I usually download and run the macro you can find at:&amp;nbsp;&lt;A href="https://communities.sas.com/t5/SAS-Communities-Library/A-better-way-to-FLIP-i-e-transpose-make-wide-a-dataset/ta-p/433620" target="_blank"&gt;https://communities.sas.com/t5/SAS-Communities-Library/A-better-way-to-FLIP-i-e-transpose-make-wide-a-dataset/ta-p/433620&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Using that method, I think the following code will do what you want:&lt;/P&gt;
&lt;PRE&gt;proc transpose data=have out=need name=month;
  by id;
  var jan17--mar17;
run;

data need (drop=COL1);
  set need;
  array STRING(*) $ var1-var7;
  date=input(month,monyy.);
  i=1;
  do while(scan(COL1, i, " - ") ne "");
    STRING(i) =scan(COL1, i, " - ");
    i+1;
  end;
  output;
run;

%transpose(data=need,out=want,by=id,id=date,format=monyy5.,var=var:,var_first=no)
/* or, if you want the months and variables separated by an underscore */
%transpose(data=need,out=want,by=id,id=date,format=monyy5.,var=var:,var_first=no,delimiter=_)
&lt;/PRE&gt;
&lt;P&gt;Art, CEO, AnalystFinder.com&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 22 Mar 2018 22:16:57 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-to-Parse-Multiple-Variables-Multiple-Times/m-p/447975#M112620</guid>
      <dc:creator>art297</dc:creator>
      <dc:date>2018-03-22T22:16:57Z</dc:date>
    </item>
    <item>
      <title>Re: Macro to Parse Multiple Variables Multiple Times?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Macro-to-Parse-Multiple-Variables-Multiple-Times/m-p/448245#M112754</link>
      <description>&lt;P&gt;Took some work, but this got me what I needed in the long run! Thanks!&lt;/P&gt;</description>
      <pubDate>Fri, 23 Mar 2018 17:23:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Macro-to-Parse-Multiple-Variables-Multiple-Times/m-p/448245#M112754</guid>
      <dc:creator>EHealy</dc:creator>
      <dc:date>2018-03-23T17:23:50Z</dc:date>
    </item>
  </channel>
</rss>

