<?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 Looping through list of values to find maximum in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Looping-through-list-of-values-to-find-maximum/m-p/723673#M224604</link>
    <description>&lt;P&gt;I have a dataset that I transposed. My goal is to identify whether each individual had any presence of several diseases in any visit. This is how the data is set up:&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;Comorb&lt;/TD&gt;&lt;TD&gt;Visit1&lt;/TD&gt;&lt;TD&gt;Visit2&lt;/TD&gt;&lt;TD&gt;Vsit3&lt;/TD&gt;&lt;TD&gt;Visit4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Diabetes&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Stroke&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Osteoar&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&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;Diabetes&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;Stroke&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&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;Osteoar&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;I have more comorbidities and more visits in my dataset, this is abbreviated.&lt;/P&gt;&lt;P&gt;My idea was to create a list of the comorbidities so that I can loop through each one and find the max of all the visits. If there is a 1 in any of the columns, then that person gets a 1 for that disease. I'm trying to make a macro but it's not working, this is what I have so far:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let visits= visit0, visit1, visit2, visit3, visit4;
%let name_list=Diabetes Stroke Osteoar;
%macro get_comorbidities(comorb_name=);

		%local i next_name;
		%do i=1 %to %sysfunc(countw(&amp;amp;name_list));
   			%let next_name = %scan(&amp;amp;name_list, &amp;amp;i);
				data try1;
					set comorb_t;
   					%if comorb=&amp;amp;next_name %then &amp;amp;comorb_name=max(&amp;amp;visits);
					
				run;
		%end;
%mend get_comorbidities;

%get_comorbidities(comorb_name=diabetes_flag);&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;But the new variable (diabetes in this case) isn't getting created. My macro understanding is still basic so I appreciate any help!&lt;/P&gt;</description>
    <pubDate>Thu, 04 Mar 2021 21:43:56 GMT</pubDate>
    <dc:creator>alpine_nights</dc:creator>
    <dc:date>2021-03-04T21:43:56Z</dc:date>
    <item>
      <title>Looping through list of values to find maximum</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Looping-through-list-of-values-to-find-maximum/m-p/723673#M224604</link>
      <description>&lt;P&gt;I have a dataset that I transposed. My goal is to identify whether each individual had any presence of several diseases in any visit. This is how the data is set up:&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;Comorb&lt;/TD&gt;&lt;TD&gt;Visit1&lt;/TD&gt;&lt;TD&gt;Visit2&lt;/TD&gt;&lt;TD&gt;Vsit3&lt;/TD&gt;&lt;TD&gt;Visit4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Diabetes&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Stroke&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Osteoar&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&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;Diabetes&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;Stroke&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&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;Osteoar&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;I have more comorbidities and more visits in my dataset, this is abbreviated.&lt;/P&gt;&lt;P&gt;My idea was to create a list of the comorbidities so that I can loop through each one and find the max of all the visits. If there is a 1 in any of the columns, then that person gets a 1 for that disease. I'm trying to make a macro but it's not working, this is what I have so far:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;%let visits= visit0, visit1, visit2, visit3, visit4;
%let name_list=Diabetes Stroke Osteoar;
%macro get_comorbidities(comorb_name=);

		%local i next_name;
		%do i=1 %to %sysfunc(countw(&amp;amp;name_list));
   			%let next_name = %scan(&amp;amp;name_list, &amp;amp;i);
				data try1;
					set comorb_t;
   					%if comorb=&amp;amp;next_name %then &amp;amp;comorb_name=max(&amp;amp;visits);
					
				run;
		%end;
%mend get_comorbidities;

%get_comorbidities(comorb_name=diabetes_flag);&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;But the new variable (diabetes in this case) isn't getting created. My macro understanding is still basic so I appreciate any help!&lt;/P&gt;</description>
      <pubDate>Thu, 04 Mar 2021 21:43:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Looping-through-list-of-values-to-find-maximum/m-p/723673#M224604</guid>
      <dc:creator>alpine_nights</dc:creator>
      <dc:date>2021-03-04T21:43:56Z</dc:date>
    </item>
    <item>
      <title>Re: Looping through list of values to find maximum</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Looping-through-list-of-values-to-find-maximum/m-p/723697#M224616</link>
      <description>What are you expecting as your final output?</description>
      <pubDate>Thu, 04 Mar 2021 22:24:03 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Looping-through-list-of-values-to-find-maximum/m-p/723697#M224616</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2021-03-04T22:24:03Z</dc:date>
    </item>
    <item>
      <title>Re: Looping through list of values to find maximum</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Looping-through-list-of-values-to-find-maximum/m-p/723701#M224620</link>
      <description>&lt;P&gt;I suggest you write one iteration of your code WITHOUT using macro coding.&amp;nbsp; Make sure it works, then post it here, and we can help you learn how to macro-ize it&amp;nbsp; (and &lt;EM&gt;&lt;STRONG&gt;whether&lt;/STRONG&gt;&lt;/EM&gt; to macro-ize it)..&lt;/P&gt;</description>
      <pubDate>Thu, 04 Mar 2021 22:28:54 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Looping-through-list-of-values-to-find-maximum/m-p/723701#M224620</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2021-03-04T22:28:54Z</dc:date>
    </item>
    <item>
      <title>Re: Looping through list of values to find maximum</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Looping-through-list-of-values-to-find-maximum/m-p/723704#M224623</link>
      <description>&lt;P&gt;For each individual, I would like them to have a variable for each disease. For example:&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;Comorb&lt;/TD&gt;&lt;TD&gt;Visit1&lt;/TD&gt;&lt;TD&gt;Visit2&lt;/TD&gt;&lt;TD&gt;Vsit3&lt;/TD&gt;&lt;TD&gt;Visit4&lt;/TD&gt;&lt;TD&gt;Diabetes&lt;/TD&gt;&lt;TD&gt;Stroke&lt;/TD&gt;&lt;TD&gt;Osteoar&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Diabetes&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Stroke&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;Osteoar&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;Diabetes&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;Stroke&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;Osteoar&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;.&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;and this is my "unmacro-ized code";&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data comorb_max;
	set comorb_t;

	if comorb="diabetes" then diabetes=max(&amp;amp;visits);
	if comorb="osteoar" then osteoar=max(&amp;amp;visits);
	if comorb="stroke" then stroke=max(&amp;amp;visits);
run;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;The reason I thought to use a macro to loop through the comorbidity names is because I actually have ~15 of them, so the code looks messy.&lt;/P&gt;&lt;P&gt;I would eventually like to get each row to be one individual with the 3 variables of diseases, so like this:&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;Diabetes&lt;/TD&gt;&lt;TD&gt;Stroke&lt;/TD&gt;&lt;TD&gt;Osteoar&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;1&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;So now I'm wondering if my approach is not efficient at all - even without the macro.&lt;/P&gt;</description>
      <pubDate>Thu, 04 Mar 2021 22:39:49 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Looping-through-list-of-values-to-find-maximum/m-p/723704#M224623</guid>
      <dc:creator>alpine_nights</dc:creator>
      <dc:date>2021-03-04T22:39:49Z</dc:date>
    </item>
    <item>
      <title>Re: Looping through list of values to find maximum</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Looping-through-list-of-values-to-find-maximum/m-p/723710#M224627</link>
      <description>&lt;P&gt;Then I wouldn't bother with a macro - much too messy.&amp;nbsp; Use arrays:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data comorb_max (drop=i);
	set comorb_t;
    array morb_vals {3} $10 _temporary_ ("diabetes","osteoar","stroke");
    array morb_vars {3} diabetes osteoar stroke ;

    do i=1 to dim(morb_vars);
      if comorb=morb_vals{i} then morb_vars{i}=max(of visit:);
    end;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 04 Mar 2021 23:06:22 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Looping-through-list-of-values-to-find-maximum/m-p/723710#M224627</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2021-03-04T23:06:22Z</dc:date>
    </item>
    <item>
      <title>Re: Looping through list of values to find maximum</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Looping-through-list-of-values-to-find-maximum/m-p/723714#M224631</link>
      <description>&lt;P&gt;I'm not sure why I forgot about arrays - maybe I was just trying to be fancy with macros! Anyway, thank you!&lt;/P&gt;</description>
      <pubDate>Thu, 04 Mar 2021 23:14:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Looping-through-list-of-values-to-find-maximum/m-p/723714#M224631</guid>
      <dc:creator>alpine_nights</dc:creator>
      <dc:date>2021-03-04T23:14:10Z</dc:date>
    </item>
    <item>
      <title>Re: Looping through list of values to find maximum</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Looping-through-list-of-values-to-find-maximum/m-p/723718#M224634</link>
      <description>&lt;P&gt;No macro required. You could do:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input ID  Comorb :$16.  Visit1  Visit2  Visit3   Visit4;
datalines;
1   Diabetes    0   0   0   0
1   Stroke  0   1   1   1
1   Osteoar 0   1   0   0
2   Diabetes    1   1   1   1
2   Stroke  0   0   0   0
2   Osteoar 0   0   1   1
;

proc transpose data=have out=temp;
by id;
id comorb;
var visit:;
run;

proc summary data=temp;
by id;
var diabetes -- osteoar;
output out=want(drop=_:) max=;
run;

proc print data=want noobs; run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="PGStats_0-1614899951964.png" style="width: 999px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/55477iFC0B9221ED9028E1/image-size/large?v=v2&amp;amp;px=999" role="button" title="PGStats_0-1614899951964.png" alt="PGStats_0-1614899951964.png" /&gt;&lt;/span&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 04 Mar 2021 23:19:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Looping-through-list-of-values-to-find-maximum/m-p/723718#M224634</guid>
      <dc:creator>PGStats</dc:creator>
      <dc:date>2021-03-04T23:19:33Z</dc:date>
    </item>
  </channel>
</rss>

