<?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: returning values in an array greater than 0 in New SAS User</title>
    <link>https://communities.sas.com/t5/New-SAS-User/returning-values-in-an-array-greater-than-0/m-p/619597#M19413</link>
    <description>&lt;P&gt;You might make your job of working with this data easier if you just converted the zeros to missing instead.&lt;/P&gt;
&lt;P&gt;Do not include all numeric variables in each of your arrays. As you have it now you are counting including the three listed variables twice since that were already include as part of the _NUMERIC_ variable list.&amp;nbsp; In addition by having the array definition after you create the new minxx variables those new variables are being added into the _NUMERIC_ variable list once the compiler as seen that you have created them. So MIN2 is checking one more variable than MIN since it is also checking MIN.&lt;/P&gt;
&lt;P&gt;And note that there is no need to add {*} or [*] to the ARRAY statement. When you list the actual names of the variables SAS can count how many there are.&amp;nbsp; You only need the [nnn] when you want SAS to make up names (or you are making a _temporary_ array).&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data test2;
  set have;
  array min_SL_W  PRE_SL_W_count Post_SL_W_2wk Post_SL_W_6wk;
  array min_SL_E  PRE_SL_E_count Post_SL_E_2wk Post_SL_E_6wk;
  array min_CL_W  PRE_CL_W_count Post_CL_W_2wk Post_CL_W_6wk;
  array min_CL_E  PRE_CL_E_count Post_CL_E_2wk Post_CL_E_6wk;
  array all 
    PRE_SL_W_count Post_SL_W_2wk Post_SL_W_6wk
    PRE_SL_E_count Post_SL_E_2wk Post_SL_E_6wk
    PRE_CL_W_count Post_CL_W_2wk Post_CL_W_6wk
    PRE_CL_E_count Post_CL_E_2wk Post_CL_E_6wk
  ;
  do index=1 to dim(all);
    if all[index]=0 then all[index]=.;
  end;

  min1 = min(of min_SL_W[*]);
  min2 = min(of min_SL_W[*]);
  min3 = min(of min_CL_W[*]);
  min4 = min(of min_CL_W[*]);
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
    <pubDate>Thu, 23 Jan 2020 17:20:33 GMT</pubDate>
    <dc:creator>Tom</dc:creator>
    <dc:date>2020-01-23T17:20:33Z</dc:date>
    <item>
      <title>returning values in an array greater than 0</title>
      <link>https://communities.sas.com/t5/New-SAS-User/returning-values-in-an-array-greater-than-0/m-p/619591#M19410</link>
      <description>&lt;P&gt;Using SAS 9.4&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;PRE_SL_W_count&lt;/TD&gt;&lt;TD&gt;Post_SL_W_2wk&lt;/TD&gt;&lt;TD&gt;Post_SL_W_6wk&lt;/TD&gt;&lt;TD&gt;PRE_SL_E_count&lt;/TD&gt;&lt;TD&gt;Post_SL_E_2wk&lt;/TD&gt;&lt;TD&gt;Post_SL_E_6wk&lt;/TD&gt;&lt;TD&gt;PRE_CL_W_count&lt;/TD&gt;&lt;TD&gt;Post_CL_W_2wk&lt;/TD&gt;&lt;TD&gt;Post_CL_W_6wk&lt;/TD&gt;&lt;TD&gt;PRE_CL_E_count&lt;/TD&gt;&lt;TD&gt;Post_CL_E_2wk&lt;/TD&gt;&lt;TD&gt;Post_CL_E_6wk&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;9&lt;/TD&gt;&lt;TD&gt;4&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;8&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;TD&gt;0&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have the above data and I want to find the minimum value (as long as it is greater than zero) in specific variables.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have attempted the array below but I am not sure how to return values &amp;gt;0&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data test2;&lt;BR /&gt;set have;&lt;/P&gt;&lt;P&gt;array min_SL_W {*} _numeric_ PRE_SL_W_count Post_SL_W_2wk Post_SL_W_6wk;&lt;BR /&gt;min = min(of min_SL_W[*]);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;array min_SL_E {*} _numeric_ PRE_SL_E_count Post_SL_E_2wk Post_SL_E_6wk;&lt;BR /&gt;min2 = min(of min_SL_W[*]);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;array min_CL_W {*} _numeric_ PRE_CL_W_count Post_CL_W_2wk Post_CL_W_6wk;&lt;BR /&gt;min3 = min(of min_CL_W[*]);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;array min_CL_E {*} _numeric_ PRE_CL_E_count Post_CL_E_2wk Post_CL_E_6wk;&lt;BR /&gt;min4 = min(of min_CL_W[*]);&lt;BR /&gt;run;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Is there a good method to return only values &amp;gt;0 within each of the 4 variables groupings above? Thank you&lt;/P&gt;</description>
      <pubDate>Thu, 23 Jan 2020 17:00:16 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/returning-values-in-an-array-greater-than-0/m-p/619591#M19410</guid>
      <dc:creator>GS2</dc:creator>
      <dc:date>2020-01-23T17:00:16Z</dc:date>
    </item>
    <item>
      <title>Re: returning values in an array greater than 0</title>
      <link>https://communities.sas.com/t5/New-SAS-User/returning-values-in-an-array-greater-than-0/m-p/619594#M19411</link>
      <description>&lt;P&gt;You could loop through the arrays and return the min greater than 0 with something like:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data test2;
set have;

array min_SL_W{*} _numeric_ PRE_SL_W_count Post_SL_W_2wk Post_SL_W_6wk;
min1 = 0;
do i =1 to dim(min_SL_W);
  if min_SL_W{i} &amp;lt; min1 and min_SL_W{i} ne 0 then min1 = min_SL_W{i};
end;
if min1=0 then min1=.;

...
repeat for each array
...


run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 23 Jan 2020 17:17:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/returning-values-in-an-array-greater-than-0/m-p/619594#M19411</guid>
      <dc:creator>JeffMaggio</dc:creator>
      <dc:date>2020-01-23T17:17:58Z</dc:date>
    </item>
    <item>
      <title>Re: returning values in an array greater than 0</title>
      <link>https://communities.sas.com/t5/New-SAS-User/returning-values-in-an-array-greater-than-0/m-p/619596#M19412</link>
      <description>&lt;P&gt;Maybe use the SMALLEST() function instead. You're looping until you find the smallest values that is not 0.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
set have;

array vars(*) var1-var20;

min_value=0;
i=0;

*check that any value is over 0 before starting. Not required but good idea;

if max(of vars(*))&amp;gt;0 then do while(min_value=0);
i+1;
if smallest(i, of vars(*)) &amp;gt;0 then min_value = smallest(i, of vars(*));
end;

run;
&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 23 Jan 2020 17:20:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/returning-values-in-an-array-greater-than-0/m-p/619596#M19412</guid>
      <dc:creator>Reeza</dc:creator>
      <dc:date>2020-01-23T17:20:27Z</dc:date>
    </item>
    <item>
      <title>Re: returning values in an array greater than 0</title>
      <link>https://communities.sas.com/t5/New-SAS-User/returning-values-in-an-array-greater-than-0/m-p/619597#M19413</link>
      <description>&lt;P&gt;You might make your job of working with this data easier if you just converted the zeros to missing instead.&lt;/P&gt;
&lt;P&gt;Do not include all numeric variables in each of your arrays. As you have it now you are counting including the three listed variables twice since that were already include as part of the _NUMERIC_ variable list.&amp;nbsp; In addition by having the array definition after you create the new minxx variables those new variables are being added into the _NUMERIC_ variable list once the compiler as seen that you have created them. So MIN2 is checking one more variable than MIN since it is also checking MIN.&lt;/P&gt;
&lt;P&gt;And note that there is no need to add {*} or [*] to the ARRAY statement. When you list the actual names of the variables SAS can count how many there are.&amp;nbsp; You only need the [nnn] when you want SAS to make up names (or you are making a _temporary_ array).&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data test2;
  set have;
  array min_SL_W  PRE_SL_W_count Post_SL_W_2wk Post_SL_W_6wk;
  array min_SL_E  PRE_SL_E_count Post_SL_E_2wk Post_SL_E_6wk;
  array min_CL_W  PRE_CL_W_count Post_CL_W_2wk Post_CL_W_6wk;
  array min_CL_E  PRE_CL_E_count Post_CL_E_2wk Post_CL_E_6wk;
  array all 
    PRE_SL_W_count Post_SL_W_2wk Post_SL_W_6wk
    PRE_SL_E_count Post_SL_E_2wk Post_SL_E_6wk
    PRE_CL_W_count Post_CL_W_2wk Post_CL_W_6wk
    PRE_CL_E_count Post_CL_E_2wk Post_CL_E_6wk
  ;
  do index=1 to dim(all);
    if all[index]=0 then all[index]=.;
  end;

  min1 = min(of min_SL_W[*]);
  min2 = min(of min_SL_W[*]);
  min3 = min(of min_CL_W[*]);
  min4 = min(of min_CL_W[*]);
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 23 Jan 2020 17:20:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/returning-values-in-an-array-greater-than-0/m-p/619597#M19413</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2020-01-23T17:20:33Z</dc:date>
    </item>
  </channel>
</rss>

