<?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 Using an Array to output multiple datasets by year of record with the output dataset named by year in New SAS User</title>
    <link>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512591#M2386</link>
    <description>&lt;P&gt;I am working with a large dataset which contains a variable for current year of record 'CURRENTYEAR'.&amp;nbsp; Observations in the dataset span multiple decades.&amp;nbsp; But I am only concerned with records from 2012-2016.&amp;nbsp; The dataset is structured similar to this.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;UNIQUE_ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; START&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; END&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MONTHDATE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CURRENTYEAR&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OCT12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FEB13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01OCT2012&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2012&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OCT12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FEB13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;01NOV2012&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2012&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OCT12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FEB13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;01DEC2012&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2012&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OCT12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FEB13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;01JAN2013&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2013&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OCT12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FEB13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;01FEB2013&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2013&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JUN11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAY14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01JUN2011&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2011&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JUN11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAY14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01JUL2011&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2011&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JUN11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAY14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01AUG2011&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2011&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JUN11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAY14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01SEP2011&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2011&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JUN11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAY14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01OCT2011&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2011&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JUN11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAY14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01NOV2011&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2011&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JUN11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAY14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01DEC2011&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2011&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JUN11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAY14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01JAN2012&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2012&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JUN11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAY14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01FEB2012&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2012&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JUN11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAY14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01MAR2012&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2012&lt;/P&gt;&lt;P&gt;...............&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JUN11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAY14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01MAR2014&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2014&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JUN11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAY14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01APR2014&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2014&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JUN11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAY14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01MAY2014&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2014&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have written a program in the past to subset records by CURRENTYEAR into separate output datasets.&amp;nbsp; The program worked, but I feel that an array could be more efficient.&amp;nbsp; I write a lot of programs that serve similar purposes to this.&amp;nbsp; So if I can use an array to make the program more efficient/parsimonious that would be great.&amp;nbsp; An example of the programs I am currently writing is below.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;DATA&amp;nbsp;&amp;nbsp;&amp;nbsp; YEAR2012&amp;nbsp;&amp;nbsp;&amp;nbsp; YEAR2013 &amp;nbsp;&amp;nbsp; YEAR2014 &amp;nbsp;&amp;nbsp; YEAR2015 &amp;nbsp;&amp;nbsp; YEAR2016;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SET &amp;nbsp;&amp;nbsp;&amp;nbsp;INPUTDATASET;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;BY &amp;nbsp;&amp;nbsp;&amp;nbsp;UNIQUE_ID;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;IF &amp;nbsp;&amp;nbsp;&amp;nbsp;CURRENTYEAR=2012 &amp;nbsp;&amp;nbsp;&amp;nbsp;THEN &amp;nbsp;&amp;nbsp;&amp;nbsp;OUTPUT &amp;nbsp;&amp;nbsp;&amp;nbsp;YEAR2012;&lt;/P&gt;&lt;P&gt;&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;ELSE &amp;nbsp;&amp;nbsp;&amp;nbsp;IF &amp;nbsp;&amp;nbsp;&amp;nbsp;CURRENTYEAR=2013&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;THEN &amp;nbsp;&amp;nbsp;&amp;nbsp;OUTPUT &amp;nbsp;&amp;nbsp;&amp;nbsp;YEAR2013;&lt;/P&gt;&lt;P&gt;&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;ELSE &amp;nbsp;&amp;nbsp;&amp;nbsp;IF &amp;nbsp;&amp;nbsp;&amp;nbsp;CURRENTYEAR=2014&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;THEN &amp;nbsp;&amp;nbsp;&amp;nbsp;OUTPUT &amp;nbsp;&amp;nbsp;&amp;nbsp;YEAR2014;&lt;/P&gt;&lt;P&gt;&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;ELSE &amp;nbsp;&amp;nbsp;&amp;nbsp;IF &amp;nbsp;&amp;nbsp;&amp;nbsp;CURRENTYEAR=2015&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;THEN &amp;nbsp;&amp;nbsp;&amp;nbsp;OUTPUT &amp;nbsp;&amp;nbsp;&amp;nbsp;YEAR2015;&lt;/P&gt;&lt;P&gt;&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;ELSE &amp;nbsp;&amp;nbsp;&amp;nbsp;IF &amp;nbsp;&amp;nbsp;&amp;nbsp;CURRENTYEAR=2016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;THEN &amp;nbsp;&amp;nbsp;&amp;nbsp;OUTPUT &amp;nbsp;&amp;nbsp;&amp;nbsp;YEAR2016;&lt;/P&gt;&lt;P&gt;RUN;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have attempted using arrays as written below, but encountered numerous error messages.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;DATA&amp;nbsp;&amp;nbsp;&amp;nbsp; YEAR2012&amp;nbsp;&amp;nbsp;&amp;nbsp; YEAR2013 &amp;nbsp;&amp;nbsp; YEAR2014 &amp;nbsp;&amp;nbsp; YEAR2015 &amp;nbsp;&amp;nbsp; YEAR2016;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SET &amp;nbsp;&amp;nbsp;&amp;nbsp;INPUTDATASET;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;BY &amp;nbsp;&amp;nbsp;&amp;nbsp;UNIQUE_ID;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ARRAY&amp;nbsp;&amp;nbsp;&amp;nbsp;YEAR&amp;nbsp;&amp;nbsp;&amp;nbsp;{5}&amp;nbsp;&amp;nbsp;&amp;nbsp;_TEMPORARY_ (2012-2016);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ARRAY&amp;nbsp;&amp;nbsp;&amp;nbsp;OUT&amp;nbsp;&amp;nbsp;&amp;nbsp;{5}&amp;nbsp;&amp;nbsp;&amp;nbsp;_TEMPORARY_ (YEAR2012-YEAR2016);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DO&amp;nbsp;&amp;nbsp;&amp;nbsp;I=1&amp;nbsp;&amp;nbsp;&amp;nbsp;TO&amp;nbsp;&amp;nbsp;&amp;nbsp;5;&lt;/P&gt;&lt;P&gt;&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;IF&amp;nbsp;&amp;nbsp;&amp;nbsp;CURRENTYEAR=YEAR{I}&amp;nbsp;&amp;nbsp;&amp;nbsp;THEN&amp;nbsp;&amp;nbsp;&amp;nbsp;OUTPUT&amp;nbsp;&amp;nbsp;&amp;nbsp;OUT{I};&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; END;&lt;/P&gt;&lt;P&gt;RUN;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I would greatly appreciate any suggestions for fixing the program or making it more efficient.&amp;nbsp; In addition to wanting to streamline my programing, I am also trying to branch out as a SAS programmer to start using arrays more often.&amp;nbsp; Any suggestions would be great!&amp;nbsp; I am using version 9.4 for windows.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Ted&lt;/P&gt;</description>
    <pubDate>Tue, 13 Nov 2018 15:38:28 GMT</pubDate>
    <dc:creator>LEINAARE</dc:creator>
    <dc:date>2018-11-13T15:38:28Z</dc:date>
    <item>
      <title>Using an Array to output multiple datasets by year of record with the output dataset named by year</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512591#M2386</link>
      <description>&lt;P&gt;I am working with a large dataset which contains a variable for current year of record 'CURRENTYEAR'.&amp;nbsp; Observations in the dataset span multiple decades.&amp;nbsp; But I am only concerned with records from 2012-2016.&amp;nbsp; The dataset is structured similar to this.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;UNIQUE_ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; START&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; END&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MONTHDATE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CURRENTYEAR&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OCT12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FEB13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01OCT2012&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2012&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OCT12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FEB13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;01NOV2012&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2012&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OCT12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FEB13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;01DEC2012&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2012&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OCT12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FEB13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;01JAN2013&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2013&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000001&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; OCT12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FEB13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;01FEB2013&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2013&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JUN11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAY14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01JUN2011&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2011&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JUN11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAY14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01JUL2011&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2011&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JUN11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAY14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01AUG2011&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2011&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JUN11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAY14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01SEP2011&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2011&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JUN11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAY14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01OCT2011&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2011&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JUN11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAY14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01NOV2011&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2011&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JUN11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAY14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01DEC2011&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2011&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JUN11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAY14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01JAN2012&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2012&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JUN11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAY14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01FEB2012&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2012&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JUN11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAY14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01MAR2012&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2012&lt;/P&gt;&lt;P&gt;...............&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JUN11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAY14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01MAR2014&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2014&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JUN11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAY14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01APR2014&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2014&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 000016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; JUN11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MAY14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 01MAY2014&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2014&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have written a program in the past to subset records by CURRENTYEAR into separate output datasets.&amp;nbsp; The program worked, but I feel that an array could be more efficient.&amp;nbsp; I write a lot of programs that serve similar purposes to this.&amp;nbsp; So if I can use an array to make the program more efficient/parsimonious that would be great.&amp;nbsp; An example of the programs I am currently writing is below.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;DATA&amp;nbsp;&amp;nbsp;&amp;nbsp; YEAR2012&amp;nbsp;&amp;nbsp;&amp;nbsp; YEAR2013 &amp;nbsp;&amp;nbsp; YEAR2014 &amp;nbsp;&amp;nbsp; YEAR2015 &amp;nbsp;&amp;nbsp; YEAR2016;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SET &amp;nbsp;&amp;nbsp;&amp;nbsp;INPUTDATASET;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;BY &amp;nbsp;&amp;nbsp;&amp;nbsp;UNIQUE_ID;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;IF &amp;nbsp;&amp;nbsp;&amp;nbsp;CURRENTYEAR=2012 &amp;nbsp;&amp;nbsp;&amp;nbsp;THEN &amp;nbsp;&amp;nbsp;&amp;nbsp;OUTPUT &amp;nbsp;&amp;nbsp;&amp;nbsp;YEAR2012;&lt;/P&gt;&lt;P&gt;&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;ELSE &amp;nbsp;&amp;nbsp;&amp;nbsp;IF &amp;nbsp;&amp;nbsp;&amp;nbsp;CURRENTYEAR=2013&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;THEN &amp;nbsp;&amp;nbsp;&amp;nbsp;OUTPUT &amp;nbsp;&amp;nbsp;&amp;nbsp;YEAR2013;&lt;/P&gt;&lt;P&gt;&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;ELSE &amp;nbsp;&amp;nbsp;&amp;nbsp;IF &amp;nbsp;&amp;nbsp;&amp;nbsp;CURRENTYEAR=2014&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;THEN &amp;nbsp;&amp;nbsp;&amp;nbsp;OUTPUT &amp;nbsp;&amp;nbsp;&amp;nbsp;YEAR2014;&lt;/P&gt;&lt;P&gt;&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;ELSE &amp;nbsp;&amp;nbsp;&amp;nbsp;IF &amp;nbsp;&amp;nbsp;&amp;nbsp;CURRENTYEAR=2015&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;THEN &amp;nbsp;&amp;nbsp;&amp;nbsp;OUTPUT &amp;nbsp;&amp;nbsp;&amp;nbsp;YEAR2015;&lt;/P&gt;&lt;P&gt;&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;ELSE &amp;nbsp;&amp;nbsp;&amp;nbsp;IF &amp;nbsp;&amp;nbsp;&amp;nbsp;CURRENTYEAR=2016&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;THEN &amp;nbsp;&amp;nbsp;&amp;nbsp;OUTPUT &amp;nbsp;&amp;nbsp;&amp;nbsp;YEAR2016;&lt;/P&gt;&lt;P&gt;RUN;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have attempted using arrays as written below, but encountered numerous error messages.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;DATA&amp;nbsp;&amp;nbsp;&amp;nbsp; YEAR2012&amp;nbsp;&amp;nbsp;&amp;nbsp; YEAR2013 &amp;nbsp;&amp;nbsp; YEAR2014 &amp;nbsp;&amp;nbsp; YEAR2015 &amp;nbsp;&amp;nbsp; YEAR2016;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SET &amp;nbsp;&amp;nbsp;&amp;nbsp;INPUTDATASET;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;BY &amp;nbsp;&amp;nbsp;&amp;nbsp;UNIQUE_ID;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ARRAY&amp;nbsp;&amp;nbsp;&amp;nbsp;YEAR&amp;nbsp;&amp;nbsp;&amp;nbsp;{5}&amp;nbsp;&amp;nbsp;&amp;nbsp;_TEMPORARY_ (2012-2016);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ARRAY&amp;nbsp;&amp;nbsp;&amp;nbsp;OUT&amp;nbsp;&amp;nbsp;&amp;nbsp;{5}&amp;nbsp;&amp;nbsp;&amp;nbsp;_TEMPORARY_ (YEAR2012-YEAR2016);&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DO&amp;nbsp;&amp;nbsp;&amp;nbsp;I=1&amp;nbsp;&amp;nbsp;&amp;nbsp;TO&amp;nbsp;&amp;nbsp;&amp;nbsp;5;&lt;/P&gt;&lt;P&gt;&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;IF&amp;nbsp;&amp;nbsp;&amp;nbsp;CURRENTYEAR=YEAR{I}&amp;nbsp;&amp;nbsp;&amp;nbsp;THEN&amp;nbsp;&amp;nbsp;&amp;nbsp;OUTPUT&amp;nbsp;&amp;nbsp;&amp;nbsp;OUT{I};&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; END;&lt;/P&gt;&lt;P&gt;RUN;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I would greatly appreciate any suggestions for fixing the program or making it more efficient.&amp;nbsp; In addition to wanting to streamline my programing, I am also trying to branch out as a SAS programmer to start using arrays more often.&amp;nbsp; Any suggestions would be great!&amp;nbsp; I am using version 9.4 for windows.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Ted&lt;/P&gt;</description>
      <pubDate>Tue, 13 Nov 2018 15:38:28 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512591#M2386</guid>
      <dc:creator>LEINAARE</dc:creator>
      <dc:date>2018-11-13T15:38:28Z</dc:date>
    </item>
    <item>
      <title>Re: Using an Array to output multiple datasets by year of record with the output dataset named by ye</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512599#M2389</link>
      <description>&lt;P&gt;It's great that you are learning and want to learn more.&amp;nbsp; In this particular case, however, arrays are not a viable strategy.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;One way you might be able to get your program to run faster is to limit the observations that get read in:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;set inputdataset (where=(2012 &amp;lt;= currentyear &amp;lt;= 2016));&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Other than that, the program you started with is probably as "efficient" as it gets.&amp;nbsp; Of course, there are other definitions of "efficient" ... it doesn't have to be "whatever runs fastest".&amp;nbsp; There are sophisticated approaches:&amp;nbsp; macro language could generate the OUTPUT statements so that you don't have to type them all out, or hashing could output a separate data set for each value of CURRENTYEAR.&amp;nbsp; But it's a good idea to learn arrays first.&lt;/P&gt;</description>
      <pubDate>Tue, 13 Nov 2018 15:46:29 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512599#M2389</guid>
      <dc:creator>Astounding</dc:creator>
      <dc:date>2018-11-13T15:46:29Z</dc:date>
    </item>
    <item>
      <title>Re: Using an Array to output multiple datasets by year of record with the output dataset named by ye</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512603#M2392</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you for your quick response and helpful suggestion.&amp;nbsp; I will take your advice and use the WHERE= option in the SET statement.&amp;nbsp; I was not aware that was an option.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you!&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 13 Nov 2018 15:51:59 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512603#M2392</guid>
      <dc:creator>LEINAARE</dc:creator>
      <dc:date>2018-11-13T15:51:59Z</dc:date>
    </item>
    <item>
      <title>Re: Using an Array to output multiple datasets by year of record with the output dataset named by ye</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512606#M2393</link>
      <description>&lt;P&gt;Straight up "&lt;SPAN&gt;be more efficient.&amp;nbsp; I write a lot of programs that serve similar purposes to this." - splitting your data is rarely going to yield a faster, more efficient process.&amp;nbsp; I would advise you to filter your data to what you want, but keep it in one dataset.&amp;nbsp; Just from read/writes, if you have one file, its 1 read/write+header, if you have 10 its 10 read/write+headers.&amp;nbsp; Then in your code, you are likely going to start macro looping over those datasets doing the same task etc.&amp;nbsp; Thus your code becomes larger, less managable and messy.&amp;nbsp; Just avoid that whole way of thinking.&amp;nbsp; SAS provides a system called by group processing, this means you can group data within a dataste and avoid multiple datasets/looping completely and it is efficient.&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;Also, please avoid coding all in upper case, its like your shouting code.&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Tue, 13 Nov 2018 15:55:23 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512606#M2393</guid>
      <dc:creator>RW9</dc:creator>
      <dc:date>2018-11-13T15:55:23Z</dc:date>
    </item>
    <item>
      <title>Re: Using an Array to output multiple datasets by year of record with the output dataset named by ye</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512611#M2395</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input (UNIQUE_ID     START       END       MONTHDATE) (:$20.)     CURRENTYEAR;
datalines;
000001         OCT12     FEB13       01OCT2012       2012
000001         OCT12     FEB13       01NOV2012       2012
000001         OCT12     FEB13       01DEC2012       2012
000001         OCT12     FEB13       01JAN2013        2013
000001         OCT12     FEB13       01FEB2013        2013
000016         JUN11     MAY14       01JUN2011        2011
000016         JUN11     MAY14       01JUL2011         2011
000016         JUN11     MAY14       01AUG2011        2011
000016         JUN11     MAY14       01SEP2011        2011
000016         JUN11     MAY14       01OCT2011        2011
000016         JUN11     MAY14       01NOV2011        2011
000016         JUN11     MAY14       01DEC2011        2011
000016         JUN11     MAY14       01JAN2012         2012
000016         JUN11     MAY14       01FEB2012         2012
000016         JUN11     MAY14       01MAR2012         2012
000016         JUN11     MAY14       01MAR2014         2014
000016         JUN11     MAY14       01APR2014         2014
000016         JUN11     MAY14       01MAY2014         2014
;
run;

data _null_;
if _n_=1 then do;
dcl hash Hoh () ;
   hoh.definekey  ("CURRENTYEAR") ;
   hoh.definedata ("CURRENTYEAR", "h") ;
   hoh.definedone () ;
 dcl hash H ;
 end;
set have end=lr;
if hoh.find() ne 0 then do;
h= _new_ hash(multidata:'y');
h.definekey  ("_iorc_") ;
h.definedata ('UNIQUE_ID','START','END','MONTHDATE','CURRENTYEAR') ;
h.definedone () ;
hoh.add();
end;
h.add();
dcl hiter hi('hoh');
if lr;
do while(hi.next()=0);
h.output(dataset:catx('_','currentyear',CURRENTYEAR));
end;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 13 Nov 2018 16:03:56 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512611#M2395</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2018-11-13T16:03:56Z</dc:date>
    </item>
    <item>
      <title>Re: Using an Array to output multiple datasets by year of record with the output dataset named by ye</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512615#M2396</link>
      <description>&lt;P&gt;Hi RW9,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks for the suggestion to use by group processing.&amp;nbsp; You are right, my codes tend to be long and repetitious.&amp;nbsp; I think it was useful when I began programing to help visualize modifications to datasets in sequential steps, but I should move away from that as I progress.&amp;nbsp; Sorry for shouting code.&amp;nbsp; I will code more quietly on the forum next time ; )&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;</description>
      <pubDate>Tue, 13 Nov 2018 16:12:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512615#M2396</guid>
      <dc:creator>LEINAARE</dc:creator>
      <dc:date>2018-11-13T16:12:12Z</dc:date>
    </item>
    <item>
      <title>Re: Using an Array to output multiple datasets by year of record with the output dataset named by ye</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512620#M2398</link>
      <description>&lt;P&gt;&amp;nbsp;This suggestion is not much less busy than your code, but perhaps it is a little closer to what you want:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;DATA  
      YEAR2012  (where=(currentyear=2012))
      YEAR2013  (where=(currentyear=2013))
      YEAR2014  (where=(currentyear=2014))
      YEAR2015  (where=(currentyear=2015))
      YEAR2016  (where=(currentyear=2016))
      ;
  set inputdataset;
  output;
RUN;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;You can generalize a little more by using a DATA _NULL_ step to write the desired SAS&amp;nbsp;code to a temporary file, and then %INCLUDE that code.&amp;nbsp; Not exactly an array but it does loop over the year values, making it relatively easy to change the range of year values:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;filename tmp temp;
data _null_;
  file tmp;
  put 'data ';
  do year=2012 to 2016;
    put 'year' year '(where=(currentyear=' year '))';
  end;
  put ';' / 'set inputdata;' / 'output;' / 'run;';
run;
%include tmp;
filename tmp clear;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;data _NULL_ says no sas dataset is to be named as an output dataset.&lt;/LI&gt;
&lt;LI&gt;the "file tmp" gives sas a destination for PUT statements.&amp;nbsp; In this case, it is the symbolic name TMP defined in the earlier filename statement.&lt;/LI&gt;
&lt;LI&gt;The %include tmp; statement tells sas to interpret the contents of TMP as it would the usual source of SAS code.&lt;/LI&gt;
&lt;LI&gt;The "filename tmp clear;" statement is a bit superfluous.&amp;nbsp; It tells sas to remove the symbolic name tmp.&amp;nbsp; But this would have happened anyway at the end of the sas session, since tmp was originally declared to be temporary.&lt;/LI&gt;
&lt;/OL&gt;
&lt;P&gt;And I should have added that this program requires you to know in&amp;nbsp;advance the expected values of currentyear.&lt;/P&gt;</description>
      <pubDate>Tue, 13 Nov 2018 16:21:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512620#M2398</guid>
      <dc:creator>mkeintz</dc:creator>
      <dc:date>2018-11-13T16:21:13Z</dc:date>
    </item>
    <item>
      <title>Re: Using an Array to output multiple datasets by year of record with the output dataset named by ye</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512622#M2399</link>
      <description>&lt;P&gt;Hi Novinosrin,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you for working out a code for this.&amp;nbsp; To be honest, this is more advanced than my current skill level.&amp;nbsp; I will take some time to look up the functions you used.&amp;nbsp; I really like the idea of using the catx function with&amp;nbsp;'dataset:'.&amp;nbsp;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks again!&lt;/P&gt;</description>
      <pubDate>Tue, 13 Nov 2018 16:19:50 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512622#M2399</guid>
      <dc:creator>LEINAARE</dc:creator>
      <dc:date>2018-11-13T16:19:50Z</dc:date>
    </item>
    <item>
      <title>Re: Using an Array to output multiple datasets by year of record with the output dataset named by ye</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512623#M2400</link>
      <description>&lt;P&gt;HI&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/203435"&gt;@LEINAARE&lt;/a&gt;&amp;nbsp; Welcome to the SAS forum and if you are new to sas, sure you will speed up using this forum. I recall the same when i began using SAS over 5 years ago. I was awful. You seem smart on the contrary&lt;/P&gt;</description>
      <pubDate>Tue, 13 Nov 2018 16:23:11 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512623#M2400</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2018-11-13T16:23:11Z</dc:date>
    </item>
    <item>
      <title>Re: Using an Array to output multiple datasets by year of record with the output dataset named by ye</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512631#M2403</link>
      <description>&lt;P&gt;Hi &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/138205"&gt;@novinosrin&lt;/a&gt;.&amp;nbsp; Thank you!&amp;nbsp; And thanks&amp;nbsp;for the encouraging words!&amp;nbsp; I have&amp;nbsp;gotten quite a few tips for other procedures as well,&amp;nbsp;just from these responses.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 13 Nov 2018 16:39:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512631#M2403</guid>
      <dc:creator>LEINAARE</dc:creator>
      <dc:date>2018-11-13T16:39:32Z</dc:date>
    </item>
    <item>
      <title>Re: Using an Array to output multiple datasets by year of record with the output dataset named by ye</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512639#M2405</link>
      <description>&lt;P&gt;Hi &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/31461"&gt;@mkeintz&lt;/a&gt;.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you this program.&amp;nbsp; And thanks for writing the explanation below.&amp;nbsp; I am going to use the where= option you and &lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/4954"&gt;@Astounding&lt;/a&gt;&amp;nbsp;suggested in many of my programs in the future.&amp;nbsp;&amp;nbsp; The program you suggested, using the data _null_; option may be exactly what I am looking for.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;</description>
      <pubDate>Tue, 13 Nov 2018 16:50:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512639#M2405</guid>
      <dc:creator>LEINAARE</dc:creator>
      <dc:date>2018-11-13T16:50:14Z</dc:date>
    </item>
    <item>
      <title>Re: Using an Array to output multiple datasets by year of record with the output dataset named by ye</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512720#M2424</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/138205"&gt;@novinosrin&lt;/a&gt;:&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The HOH approach is good for splitting an unsorted file (as is the case here) but needs enough memory to hold all of its data.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;One way to reduce the hash memory footprint and still avoid sorting the entire file is to index it first by the splitting variable and then use by-processing, e.g.:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql ;                                                              
  create index currentyear on have (currentyear) ;                      
quit ;                                                                  
                                                                        
data _null_ ;                                                           
  if _n_ = 1 then do ;                                                  
    dcl hash h () ;                                                     
    h.definekey  ("_n_") ;                                              
    h.definedata ('unique_id','start','end','monthdate','currentyear') ;
    h.definedone () ;                                                   
  end ;                                                                 
  do _n_ = 1 by 1 until (last.currentyear) ;                            
    set have ;                                                          
    by currentyear ;                                                    
    h.add() ;                                                           
  end ;                                                                 
  h.output (dataset: catx ("_", "currentyear", currentyear)) ;          
  h.clear() ;                                                           
run ;                                                                   
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;This way, the hash memory footprint is confined to the extent of the largest CURRENTYEAR by-group, at the expense of the overhead of creating the index and indexed data retrieval.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Paul D.&lt;/P&gt;</description>
      <pubDate>Tue, 13 Nov 2018 20:00:32 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512720#M2424</guid>
      <dc:creator>hashman</dc:creator>
      <dc:date>2018-11-13T20:00:32Z</dc:date>
    </item>
    <item>
      <title>Re: Using an Array to output multiple datasets by year of record with the output dataset named by ye</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512723#M2425</link>
      <description>&lt;P&gt;Nice, and I assume you chose by group processing on account of OP's dataset appears sorted? .&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;And if it weren't sorted, would you think a sort is expensive or hoh is ideal?&lt;/P&gt;</description>
      <pubDate>Tue, 13 Nov 2018 20:04:25 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512723#M2425</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2018-11-13T20:04:25Z</dc:date>
    </item>
    <item>
      <title>Re: Using an Array to output multiple datasets by year of record with the output dataset named by ye</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512726#M2426</link>
      <description>&lt;P&gt;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/138205"&gt;@novinosrin&lt;/a&gt;; The OP's data set doesn't appear to be sorted by the split variable (CURRENTYEAR), which is why methought you used the HOH approach. It's ideal when the memory has no problem swallowing the data from the whole file being split, as it entails but a single pass through the input.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Indexing means implicit sorting by CURRENTYEAR (hence an extra pass through the input) and the overhead of building the the index file, the index file itself, and indexed (rather than sequential) data retrieval. On the plus side, it greatly simplifies the hash code compared to HOH, not to mention the advantage of the smaller hash RAM footprint.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Paul D.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 13 Nov 2018 20:15:27 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512726#M2426</guid>
      <dc:creator>hashman</dc:creator>
      <dc:date>2018-11-13T20:15:27Z</dc:date>
    </item>
    <item>
      <title>Re: Using an Array to output multiple datasets by year of record with the output dataset named by ye</title>
      <link>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512730#M2428</link>
      <description>&lt;P&gt;Sorry my bad. Even before looking back at OP's dataset, the moment i saw yours going for by group processing, my eyes got blind. What;s in my head is, if anything comes from PD, the assumption is PD chose accordingly and immaculate.&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;STRIKE&gt;Now, that being said, you have got me to wonder why you chose demo a by group processing approach.&amp;nbsp;&lt;/STRIKE&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Thanks again!&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;EDIT: Got the understanding.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Tue, 13 Nov 2018 20:48:17 GMT</pubDate>
      <guid>https://communities.sas.com/t5/New-SAS-User/Using-an-Array-to-output-multiple-datasets-by-year-of-record/m-p/512730#M2428</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2018-11-13T20:48:17Z</dc:date>
    </item>
  </channel>
</rss>

