<?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 SAS array in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/SAS-array/m-p/473284#M285874</link>
    <description>&lt;P&gt;Hi, I am new here... just need to understand some SAS codes like below... I was told these are arrays... but SAS array documents use square bracket instead of curly bracket after arrays... then what are they?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="http://support.sas.com/resources/papers/97529_Using_Arrays_in_SAS_Programming.pdf" target="_blank"&gt;http://support.sas.com/resources/papers/97529_Using_Arrays_in_SAS_Programming.pdf&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;What is array? Are they independent from table`s fields?&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data xxx3;&lt;BR /&gt;&amp;nbsp;set xxx2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;%let d=&amp;amp;dim;&lt;/P&gt;&lt;P&gt;&amp;nbsp;array output {&amp;amp;d};&lt;BR /&gt;&amp;nbsp;array input {&amp;amp;d};&lt;BR /&gt;&amp;nbsp;array pppdate {&amp;amp;d};&lt;BR /&gt;&amp;nbsp;array ind {&amp;amp;d};&lt;BR /&gt;&amp;nbsp;array ccc {&amp;amp;d};&lt;BR /&gt;&amp;nbsp;array ddd {&amp;amp;d};&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;do i=0 to (&amp;amp;d-1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;if ccc{&amp;amp;d-i}=1 then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if pppdate{&amp;amp;d-i} ne . then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;naec=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if daaate&amp;lt;=pppdate{&amp;amp;d-i} then taec=pppdate{&amp;amp;d-i}-daaate;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;else do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;naec=1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if daaate&amp;lt;=input{&amp;amp;d-i} and input{&amp;amp;d-i} ne . then taec=input{&amp;amp;d-i}-daaate;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;do a=1 to &amp;amp;d;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if input{a}&amp;gt;daaate and ind{a}=0 and&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (input{a}-outdate&amp;gt;3 or fstEMGC=1 or (ddate^=. and ddate=output{a}-input{a}+1)) then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ddd{a}=1 and STRREC=. then STRREC=input{a}-daaate;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;</description>
    <pubDate>Tue, 26 Jun 2018 09:46:31 GMT</pubDate>
    <dc:creator>Irene999</dc:creator>
    <dc:date>2018-06-26T09:46:31Z</dc:date>
    <item>
      <title>SAS array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SAS-array/m-p/473284#M285874</link>
      <description>&lt;P&gt;Hi, I am new here... just need to understand some SAS codes like below... I was told these are arrays... but SAS array documents use square bracket instead of curly bracket after arrays... then what are they?&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="http://support.sas.com/resources/papers/97529_Using_Arrays_in_SAS_Programming.pdf" target="_blank"&gt;http://support.sas.com/resources/papers/97529_Using_Arrays_in_SAS_Programming.pdf&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;What is array? Are they independent from table`s fields?&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;data xxx3;&lt;BR /&gt;&amp;nbsp;set xxx2;&lt;/P&gt;&lt;P&gt;&amp;nbsp;%let d=&amp;amp;dim;&lt;/P&gt;&lt;P&gt;&amp;nbsp;array output {&amp;amp;d};&lt;BR /&gt;&amp;nbsp;array input {&amp;amp;d};&lt;BR /&gt;&amp;nbsp;array pppdate {&amp;amp;d};&lt;BR /&gt;&amp;nbsp;array ind {&amp;amp;d};&lt;BR /&gt;&amp;nbsp;array ccc {&amp;amp;d};&lt;BR /&gt;&amp;nbsp;array ddd {&amp;amp;d};&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;do i=0 to (&amp;amp;d-1);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;if ccc{&amp;amp;d-i}=1 then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;if pppdate{&amp;amp;d-i} ne . then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;naec=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if daaate&amp;lt;=pppdate{&amp;amp;d-i} then taec=pppdate{&amp;amp;d-i}-daaate;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;else do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;naec=1;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if daaate&amp;lt;=input{&amp;amp;d-i} and input{&amp;amp;d-i} ne . then taec=input{&amp;amp;d-i}-daaate;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;end;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;end;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;end;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;do a=1 to &amp;amp;d;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if input{a}&amp;gt;daaate and ind{a}=0 and&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (input{a}-outdate&amp;gt;3 or fstEMGC=1 or (ddate^=. and ddate=output{a}-input{a}+1)) then do;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ddd{a}=1 and STRREC=. then STRREC=input{a}-daaate;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; end;&lt;/P&gt;&lt;P&gt;run;&lt;/P&gt;</description>
      <pubDate>Tue, 26 Jun 2018 09:46:31 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SAS-array/m-p/473284#M285874</guid>
      <dc:creator>Irene999</dc:creator>
      <dc:date>2018-06-26T09:46:31Z</dc:date>
    </item>
    <item>
      <title>Re: SAS array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SAS-array/m-p/473288#M285875</link>
      <description>&lt;P&gt;You can use [] or {} it doesn't matter, just be consistent in which ones you use.&amp;nbsp; Some prefer [] as it reflect other languages more, some prefer {}.&amp;nbsp; Its mainly to separate them out from function calls which use (), so I would never advise using those.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;An array is different to other languages.&amp;nbsp; An array in SAS is a reference to variables in the dataset, either ones which exist or ones created by the array statement, but the array itself is nothing more than an alias for a list of variables in a dataset, it is not a data container itself.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I would suggest looking at some coding standards.&lt;/P&gt;
&lt;P&gt;This:&lt;/P&gt;
&lt;P&gt;data xxx3;&lt;BR /&gt;&amp;nbsp;set xxx2;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;%let d=&amp;amp;dim;&lt;/P&gt;
&lt;P&gt;Is not good coding, call datasets at least reasonable names.&amp;nbsp; Also, don't put %let statements in datastep code, especially when they don't actually do anything as:&lt;/P&gt;
&lt;P&gt;data xxx3;&lt;BR /&gt;&amp;nbsp;set xxx2;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;array output {&amp;amp;dim.};&lt;BR /&gt;&amp;nbsp;array input {&amp;amp;dim.};&lt;/P&gt;
&lt;P&gt;Is the same, you just create one extra macro variable for no reason.&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Always finish macro variables with a point as I have done above, in 70% of the time it doesn't matter, but sometimes it does, and its good practice, it should also highlight in your code window better.&lt;/P&gt;
&lt;P&gt;Generally speaking if you have lots of the same variables, as indicated by loads of array statements, a bit of data remodeling will make your life easier, so from (just guessing what your data looks like):&lt;BR /&gt;output1 output2 output3 input1 input2 input3 ...ddd1 ddd2 ddd3&lt;/P&gt;
&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3&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; 8&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 9&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;12&amp;nbsp; &amp;nbsp; &amp;nbsp; 14&amp;nbsp; &amp;nbsp; &amp;nbsp;13&lt;/P&gt;
&lt;P&gt;...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;To&lt;/P&gt;
&lt;P&gt;Order&amp;nbsp; &amp;nbsp;Output&amp;nbsp; Input ... ddd&lt;/P&gt;
&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 8&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;12&lt;/P&gt;
&lt;P&gt;2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 9&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 14&lt;/P&gt;
&lt;P&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 13&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In this way you code simplifies down to something like this:&lt;/P&gt;
&lt;PRE&gt;data xxx3;
 set xxx2;
 if ccc=1 then do;
   if pppdate ne . then do;
     naec=0;
      if daaate&amp;lt;=pppdatethen taec=pppdate-daaate;
   end;
   else do;
     naec=1;
     if daaate&amp;lt;=... ne . then taec=...-daaate;
   end;
  end;
  do a=1 to &amp;amp;dim.;
    if a &amp;gt; daaate and ind=0 and
         (a-outdate &amp;gt; 3 or fstEMGC=1 or (ddate ne . and ddate=output-a+1)) then do;
      if ddd=1 and STRREC=. then STRREC=a-daaate;
    end;
  end;
run;&lt;/PRE&gt;
&lt;P&gt;Note, I have no test data in the form of a datastep or required output to work with, so can't really tell what the have and want are to provided acurate code.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 26 Jun 2018 10:04:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SAS-array/m-p/473288#M285875</guid>
      <dc:creator>RW9</dc:creator>
      <dc:date>2018-06-26T10:04:28Z</dc:date>
    </item>
    <item>
      <title>Re: SAS array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SAS-array/m-p/473320#M285876</link>
      <description>&lt;P&gt;Hi, could you explain a bit more of what the do loop is doing? for me, it just change or keep the value of naec which just contains one number..&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Yes, I have lots of arrays like ccc, (not variables),&amp;nbsp; all going through the same process, but I dont understand what you mean by remodeling them... can you explain a bit more? TIA&lt;/P&gt;</description>
      <pubDate>Tue, 26 Jun 2018 11:29:53 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SAS-array/m-p/473320#M285876</guid>
      <dc:creator>Irene999</dc:creator>
      <dc:date>2018-06-26T11:29:53Z</dc:date>
    </item>
    <item>
      <title>Re: SAS array</title>
      <link>https://communities.sas.com/t5/SAS-Programming/SAS-array/m-p/473336#M285877</link>
      <description>&lt;P&gt;A do loop iterates the code between the do and end the number of times indicated by the do statement.&amp;nbsp; So in this instance:&lt;/P&gt;
&lt;PRE&gt;do a=1 to &amp;amp;dim.;&lt;/PRE&gt;
&lt;P&gt;the code up to the corresponding end statement will be executed &amp;amp;dim. times, with the variable a being incremented by 1 on each iteration.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Modelling data is the technique of efficiently storing and using data.&amp;nbsp; There are manya ways to store data, some are faster to use but take more space, some are easier for different ways of thinking e.g. Normalised versus Transposed.&amp;nbsp; In this instance you have all the data going across the page, it is called transposed and is often associated with Excel working.&amp;nbsp; Normalised, means having a small set of variables where the data go down the page rather than across - mostly used in database and such like.&amp;nbsp; There are benefits to both, although my preference leans towards the latter.&amp;nbsp; I provided an example earlier of each:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Transposed (as you have it now)&lt;/P&gt;
&lt;P&gt;output1 output2 output3 input1 input2 input3 ...ddd1 ddd2 ddd3&lt;/P&gt;
&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3&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; 8&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 9&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;12&amp;nbsp; &amp;nbsp; &amp;nbsp; 14&amp;nbsp; &amp;nbsp; &amp;nbsp;13&lt;/P&gt;
&lt;P&gt;...&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Nomalised&lt;/P&gt;
&lt;P&gt;Order&amp;nbsp; &amp;nbsp;Output&amp;nbsp; Input ... ddd&lt;/P&gt;
&lt;P&gt;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 8&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;12&lt;/P&gt;
&lt;P&gt;2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 9&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 14&lt;/P&gt;
&lt;P&gt;3&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;2&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 13&lt;/P&gt;</description>
      <pubDate>Tue, 26 Jun 2018 12:16:41 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/SAS-array/m-p/473336#M285877</guid>
      <dc:creator>RW9</dc:creator>
      <dc:date>2018-06-26T12:16:41Z</dc:date>
    </item>
  </channel>
</rss>

