<?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: Array index out of bounds (SAS 9.4) in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Array-index-out-of-bounds-SAS-9-4/m-p/385146#M92099</link>
    <description>&lt;P&gt;Alternatively to the "until" approach you can use a leave instruction.&lt;/P&gt;
&lt;P&gt;Inside any do loop:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;do &amp;lt;loop control&amp;gt;;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;lt;code&amp;gt;;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; if condition is true then Leave;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;lt;more code to execute when the condition is not true&amp;gt;&lt;/P&gt;
&lt;P&gt;end;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Will exit the do loop before hitting the bottom end&lt;/P&gt;</description>
    <pubDate>Wed, 02 Aug 2017 22:48:37 GMT</pubDate>
    <dc:creator>ballardw</dc:creator>
    <dc:date>2017-08-02T22:48:37Z</dc:date>
    <item>
      <title>Array index out of bounds (SAS 9.4)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Array-index-out-of-bounds-SAS-9-4/m-p/384934#M92005</link>
      <description>&lt;P&gt;I'm trying to use an array to change my dataset from multiple rows per patient to a single row per patient with many columns.&amp;nbsp; It was working perfectly until I tried adding a second array for another medication type and goofed something up.&amp;nbsp; I'm not seeing what I messed up; need another pair of eyes to take a look.&amp;nbsp; Here's the code I'm using.&amp;nbsp; The error is array subscript out of range, and the log shows that I=11.&amp;nbsp;&amp;nbsp; Please help!!!&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;DATA MEDS ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; SET GET_COUNTS ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; BY PATIENT_ID ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; FORMAT CLINDAMYCIN CEPHALOSPORIN FLOUROQUINOLONE VANCOMYCIN PPI 1. ;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; RETAIN CLINDAMYCIN CEPHALOSPORIN FLOUROQUINOLONE VANCOMYCIN PPI ;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; * 1 = YES, 0 = NO ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; CLINDAMYCIN = 0 ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; CEPHALOSPORIN = 0 ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; FLOUROQUINOLONE = 0 ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; VANCOMYCIN = 0 ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; PPI = 0 ;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; ARRAY ABX[*] $ 15. ABX1 - ABX10 ;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; RETAIN ABX1 - ABX10 ;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; IF FIRST.PATIENT_ID THEN DO I = 1 TO 10 ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ABX[I] = ' ' ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; END ;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; ABX[ABX_COUNT] = ABX_NAME ;&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; DO I = 1 TO 10 ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IF ABX[I] = 'CLINDAMYCIN' THEN CLINDAMYCIN = '1' ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; END ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; DO I = 1 TO 10 ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IF ABX[I] IN ('CEFUROXIME', 'CEFPROZIL', 'CEFACLOR', 'CEFTRIAXONE', 'CEFOTAXIME' )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; THEN CEPHALOSPORIN = '1' ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; END ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; DO I = 1 TO 10 ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IF ABX[I] IN ('CIPROFLOXACIN', 'LEVOFLOXACIN', 'GATIFLOXACIN', 'MOXIFLOXACIN', 'OFLOXACIN' )&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; THEN FLOUROQUINOLONE = '1' ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; END;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; DO I = 1 TO 10 ;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IF ABX[I] = 'VANCOMYCIN' THEN VANCOMYCIN = '1' ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; END ;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; IF LAST.PATIENT_ID THEN OUTPUT ;&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; KEEP PATIENT_ID AGEGRP GENDER STUDY_GRP ABX_COUNT ABX1 - ABX10 CLINDAMYCIN CEPHALOSPORIN FLOUROQUINOLONE VANCOMYCIN PPI ;&lt;BR /&gt;RUN ;&lt;/P&gt;</description>
      <pubDate>Wed, 02 Aug 2017 12:45:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Array-index-out-of-bounds-SAS-9-4/m-p/384934#M92005</guid>
      <dc:creator>tmtemples</dc:creator>
      <dc:date>2017-08-02T12:45:59Z</dc:date>
    </item>
    <item>
      <title>Re: Array index out of bounds (SAS 9.4)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Array-index-out-of-bounds-SAS-9-4/m-p/384940#M92008</link>
      <description>&lt;P&gt;Please post test data in the form of a datastep in teh post (use the {i} window to add code in). &amp;nbsp;Its also very hard to read your code which is all in upcase. &amp;nbsp;From what I can tell roughly all you are doing is setting a flag based on the drug, so you could just transpose the data. &amp;nbsp;Its very hard to tell however without some inputs and some required output. &amp;nbsp;Note, I would avoid using real information (I recognise those drug names for instance).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Adding example:&lt;/P&gt;
&lt;PRE&gt;proc transpose data=have out=inter1 prefix=abx;
  by patient_id;
  var abx_med;
run;
proc transpose data=have out=inter2 prefix=other;
  by patient_id;
  var othervar;
run;
data want;
  merge inter1 inter2;
  by patient_id;
  abx_c=catx(',',of abx:);
  do i=1 to countw(abx_c,",");
    select(scan(abx_c,i,","));
      when("CEF.....)  var1=1;
      ...
    end;
  end;
run;&lt;/PRE&gt;
&lt;P&gt;Do also note that whilst you make the drug variables numeric, you are assigning characters to them later in your code, not good practice:&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;&amp;nbsp;CLINDAMYCIN = 0 ; &amp;nbsp; &amp;lt;= numeric&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; IF ABX[I] = 'CLINDAMYCIN' THEN CLINDAMYCIN = '1' ; &amp;nbsp;&amp;lt;=char&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Wed, 02 Aug 2017 13:02:33 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Array-index-out-of-bounds-SAS-9-4/m-p/384940#M92008</guid>
      <dc:creator>RW9</dc:creator>
      <dc:date>2017-08-02T13:02:33Z</dc:date>
    </item>
    <item>
      <title>Re: Array index out of bounds (SAS 9.4)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Array-index-out-of-bounds-SAS-9-4/m-p/384947#M92010</link>
      <description>&lt;P&gt;This statement&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;ABX[ABX_COUNT] = ABX_NAME ;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;is the most likely culprit. Variable I will always be 11 after a do loop that counts to 10 has finished.&lt;/P&gt;
&lt;P&gt;So look for the values of abx_count in your dataset.&lt;/P&gt;</description>
      <pubDate>Wed, 02 Aug 2017 13:02:08 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Array-index-out-of-bounds-SAS-9-4/m-p/384947#M92010</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2017-08-02T13:02:08Z</dc:date>
    </item>
    <item>
      <title>Re: Array index out of bounds (SAS 9.4)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Array-index-out-of-bounds-SAS-9-4/m-p/384950#M92011</link>
      <description>&lt;P&gt;Thank you.&amp;nbsp; Is there a way to stop the DO loop once the desired result is found?&lt;/P&gt;</description>
      <pubDate>Wed, 02 Aug 2017 13:05:05 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Array-index-out-of-bounds-SAS-9-4/m-p/384950#M92011</guid>
      <dc:creator>tmtemples</dc:creator>
      <dc:date>2017-08-02T13:05:05Z</dc:date>
    </item>
    <item>
      <title>Re: Array index out of bounds (SAS 9.4)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Array-index-out-of-bounds-SAS-9-4/m-p/384956#M92013</link>
      <description>&lt;P&gt;You are correct!&amp;nbsp; I have an initial count of 0.&amp;nbsp; The eleven was not the problem!&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you!!!&lt;/P&gt;</description>
      <pubDate>Wed, 02 Aug 2017 13:28:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Array-index-out-of-bounds-SAS-9-4/m-p/384956#M92013</guid>
      <dc:creator>tmtemples</dc:creator>
      <dc:date>2017-08-02T13:28:27Z</dc:date>
    </item>
    <item>
      <title>Re: Array index out of bounds (SAS 9.4)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Array-index-out-of-bounds-SAS-9-4/m-p/384957#M92014</link>
      <description>&lt;P&gt;Yes, although it will require that you fix some earlier details.&amp;nbsp; Right now, you have:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;DO I = 1 TO 10 ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IF ABX[I] = 'CLINDAMYCIN' THEN CLINDAMYCIN = '1' ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; END ;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Since CLINDAMYCIN was created as a numeric variable, remove the quotes around '1'.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To end the loop once a match is found:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;DO I = 1 TO 10&amp;nbsp; until (CLINDAMYCIN = 1);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IF ABX[I] = 'CLINDAMYCIN' THEN CLINDAMYCIN = 1 ;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; END ;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Note that this has nothing to do with your original problem, which still requires investigating ABX_COUNT.&lt;/P&gt;</description>
      <pubDate>Wed, 02 Aug 2017 13:30:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Array-index-out-of-bounds-SAS-9-4/m-p/384957#M92014</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2017-08-02T13:30:37Z</dc:date>
    </item>
    <item>
      <title>Re: Array index out of bounds (SAS 9.4)</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Array-index-out-of-bounds-SAS-9-4/m-p/385146#M92099</link>
      <description>&lt;P&gt;Alternatively to the "until" approach you can use a leave instruction.&lt;/P&gt;
&lt;P&gt;Inside any do loop:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;do &amp;lt;loop control&amp;gt;;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;lt;code&amp;gt;;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; if condition is true then Leave;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;lt;more code to execute when the condition is not true&amp;gt;&lt;/P&gt;
&lt;P&gt;end;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Will exit the do loop before hitting the bottom end&lt;/P&gt;</description>
      <pubDate>Wed, 02 Aug 2017 22:48:37 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Array-index-out-of-bounds-SAS-9-4/m-p/385146#M92099</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2017-08-02T22:48:37Z</dc:date>
    </item>
  </channel>
</rss>

