<?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: Moving Columns to the left for every Row in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Moving-Columns-to-the-left-for-every-Row/m-p/583172#M165988</link>
    <description>&lt;P&gt;Second what all the others said, having data (dates) in structure (variable names) is always a bad idea and only useful for human consumption of final results. During processing and storage, always use a "long" format.&lt;/P&gt;
&lt;P&gt;See Maxims 19 and 33.&lt;/P&gt;</description>
    <pubDate>Thu, 22 Aug 2019 13:26:20 GMT</pubDate>
    <dc:creator>Kurt_Bremser</dc:creator>
    <dc:date>2019-08-22T13:26:20Z</dc:date>
    <item>
      <title>Moving Columns to the left for every Row</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Moving-Columns-to-the-left-for-every-Row/m-p/583152#M165978</link>
      <description>&lt;P&gt;Hi&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have a Data Set that looks like below:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;It has an ID and then values bimonthly from 201802 onward, you can see that if the start date is 201802 then the values start from 201802, if its 201806 then they will start from 201806&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;ID&lt;/TD&gt;&lt;TD&gt;Start Date&lt;/TD&gt;&lt;TD&gt;201802&lt;/TD&gt;&lt;TD&gt;201804&lt;/TD&gt;&lt;TD&gt;201806&lt;/TD&gt;&lt;TD&gt;201808&lt;/TD&gt;&lt;TD&gt;201810&lt;/TD&gt;&lt;TD&gt;201812&lt;/TD&gt;&lt;TD&gt;201902&lt;/TD&gt;&lt;TD&gt;201904&lt;/TD&gt;&lt;TD&gt;201906&lt;/TD&gt;&lt;TD&gt;201908&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;112&lt;/TD&gt;&lt;TD&gt;201802&lt;/TD&gt;&lt;TD&gt;500&lt;/TD&gt;&lt;TD&gt;210&lt;/TD&gt;&lt;TD&gt;525&lt;/TD&gt;&lt;TD&gt;555&lt;/TD&gt;&lt;TD&gt;565&lt;/TD&gt;&lt;TD&gt;555&lt;/TD&gt;&lt;TD&gt;598&lt;/TD&gt;&lt;TD&gt;600&lt;/TD&gt;&lt;TD&gt;521&lt;/TD&gt;&lt;TD&gt;123&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;231&lt;/TD&gt;&lt;TD&gt;201904&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;500&lt;/TD&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;365&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;367&lt;/TD&gt;&lt;TD&gt;201806&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;256&lt;/TD&gt;&lt;TD&gt;586&lt;/TD&gt;&lt;TD&gt;265&lt;/TD&gt;&lt;TD&gt;254&lt;/TD&gt;&lt;TD&gt;2156&lt;/TD&gt;&lt;TD&gt;145&lt;/TD&gt;&lt;TD&gt;241&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;856&lt;/TD&gt;&lt;TD&gt;201908&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;255&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;245&lt;/TD&gt;&lt;TD&gt;201812&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;258&lt;/TD&gt;&lt;TD&gt;125&lt;/TD&gt;&lt;TD&gt;582&lt;/TD&gt;&lt;TD&gt;254&lt;/TD&gt;&lt;TD&gt;153&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I need the following as my output -&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;TABLE&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;ID&lt;/TD&gt;&lt;TD&gt;Start Date&lt;/TD&gt;&lt;TD&gt;Refresh1&lt;/TD&gt;&lt;TD&gt;Refresh2&lt;/TD&gt;&lt;TD&gt;Refresh3&lt;/TD&gt;&lt;TD&gt;Refresh4&lt;/TD&gt;&lt;TD&gt;Refresh5&lt;/TD&gt;&lt;TD&gt;Refresh6&lt;/TD&gt;&lt;TD&gt;Refresh7&lt;/TD&gt;&lt;TD&gt;Refresh8&lt;/TD&gt;&lt;TD&gt;Refresh9&lt;/TD&gt;&lt;TD&gt;Refresh10&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;112&lt;/TD&gt;&lt;TD&gt;201802&lt;/TD&gt;&lt;TD&gt;500&lt;/TD&gt;&lt;TD&gt;210&lt;/TD&gt;&lt;TD&gt;525&lt;/TD&gt;&lt;TD&gt;555&lt;/TD&gt;&lt;TD&gt;565&lt;/TD&gt;&lt;TD&gt;555&lt;/TD&gt;&lt;TD&gt;598&lt;/TD&gt;&lt;TD&gt;600&lt;/TD&gt;&lt;TD&gt;521&lt;/TD&gt;&lt;TD&gt;123&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;231&lt;/TD&gt;&lt;TD&gt;201904&lt;/TD&gt;&lt;TD&gt;500&lt;/TD&gt;&lt;TD&gt;25&lt;/TD&gt;&lt;TD&gt;365&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;367&lt;/TD&gt;&lt;TD&gt;201806&lt;/TD&gt;&lt;TD&gt;100&lt;/TD&gt;&lt;TD&gt;256&lt;/TD&gt;&lt;TD&gt;586&lt;/TD&gt;&lt;TD&gt;265&lt;/TD&gt;&lt;TD&gt;254&lt;/TD&gt;&lt;TD&gt;2156&lt;/TD&gt;&lt;TD&gt;145&lt;/TD&gt;&lt;TD&gt;241&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;856&lt;/TD&gt;&lt;TD&gt;201908&lt;/TD&gt;&lt;TD&gt;255&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;245&lt;/TD&gt;&lt;TD&gt;201812&lt;/TD&gt;&lt;TD&gt;258&lt;/TD&gt;&lt;TD&gt;125&lt;/TD&gt;&lt;TD&gt;582&lt;/TD&gt;&lt;TD&gt;254&lt;/TD&gt;&lt;TD&gt;153&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;So basically all the values from the first column shift to the left and start from there....i am Just lost in how to accomplish this, any help is much appreciated&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks!&lt;/P&gt;</description>
      <pubDate>Thu, 22 Aug 2019 12:48:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Moving-Columns-to-the-left-for-every-Row/m-p/583152#M165978</guid>
      <dc:creator>SNG1</dc:creator>
      <dc:date>2019-08-22T12:48:01Z</dc:date>
    </item>
    <item>
      <title>Re: Moving Columns to the left for every Row</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Moving-Columns-to-the-left-for-every-Row/m-p/583157#M165980</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
input ID StartDate :yymmn6. _201802 _201804 _201806 _201808 _201810 _201812 _201902 _201904 _201906 _201908;
infile datalines dlm=',' dsd;
datalines;
112,201802,500,210,525,555,565,555,598,600,521,123
231,201904,,,,,,,,500,25,365
367,201806,,,100,256,586,265,254,2156,145,241
856,201908,,,,,,,,,,255
245,201812,,,,,,258,125,582,254,153
;

data want (drop=_: j i);
   set have;
   array in _:;
   array out Refresh1-Refresh10;
   j=1;
   do i=1 to 10;
      if in[i] ne . then do;
         out[j]=in[i];
         j+1;
      end;
   end;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 22 Aug 2019 13:05:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Moving-Columns-to-the-left-for-every-Row/m-p/583157#M165980</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2019-08-22T13:05:58Z</dc:date>
    </item>
    <item>
      <title>Re: Moving Columns to the left for every Row</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Moving-Columns-to-the-left-for-every-Row/m-p/583159#M165982</link>
      <description>&lt;P&gt;Storing the data as a spreadsheet ("wide") is generally bad if you wish to transform it somehow.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;First transpose it to long, with a month - value pair on each row.&lt;/P&gt;
&lt;P&gt;Then you can in a succeeding data step just have a row counter going for each by group (ID startDate).&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Then transpose it back (but not necessary as a data set, use a reporting PROC to give the desired output, like PROC REPORT.&lt;/P&gt;</description>
      <pubDate>Thu, 22 Aug 2019 13:09:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Moving-Columns-to-the-left-for-every-Row/m-p/583159#M165982</guid>
      <dc:creator>LinusH</dc:creator>
      <dc:date>2019-08-22T13:09:40Z</dc:date>
    </item>
    <item>
      <title>Re: Moving Columns to the left for every Row</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Moving-Columns-to-the-left-for-every-Row/m-p/583166#M165983</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile cards expandtabs truncover ;
input ID StartDate	_201802	_201804	_201806	_201808	_201810	_201812	_201902	_201904	_201906	_201908;
cards;
112		201802	500	210	525	555	565	555	598	600	521	123
231		201904	 .	 .	 .	 .	 .	 .	 .	500	25	365
367		201806	 .	 .	100	256	586	265	254	2156 145 241
856		201908	 .	 .	 .	 .	 .	 .	 .	 .	 .	255
245		201812	 .	 .	 .	 .	 .	258	125	582	254	153
;
run;

proc transpose data=have out=temp;
by id startdate notsorted;
var _201802 --	_201908;
run;
proc transpose data=temp(where=(col1 is not missing)) out=want prefix=refresh_;
by id startdate notsorted;
var col1;
run; &lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 22 Aug 2019 13:19:12 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Moving-Columns-to-the-left-for-every-Row/m-p/583166#M165983</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2019-08-22T13:19:12Z</dc:date>
    </item>
    <item>
      <title>Re: Moving Columns to the left for every Row</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Moving-Columns-to-the-left-for-every-Row/m-p/583169#M165985</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data test;
   infile cards dsd firstobs=2;
   input ID Start:B8601DA. S201802 S201804 S201806 S201808 S201810 S201812 S201902 S201904 S201906 S201908;
   format start B8601DA10.;
   cards;
ID, Start Date, 201802, 201804, 201806, 201808, 201810, 201812, 201902, 201904, 201906, 201908
112, 201802, 500, 210, 525, 555, 565, 555, 598, 600, 521, 123
231, 201904,  .,  .,  .,  .,  .,  .,  ., 500, 25, 365
367, 201806,  .,  ., 100, 256, 586, 265, 254, 2156, 145, 241
856, 201908,  .,  .,  .,  .,  .,  .,  .,  .,  ., 255
245, 201812,  .,  .,  .,  .,  ., 258, 125, 582, 254, 153
;;;;
   run;
proc print;
   run;
proc transpose data=test out=test2(where=(not missing(col1)));
   by id start notsorted;
   run;
proc transpose data=test2 out=test2(drop=_name_) prefix=refresh ;
   by id start notsorted;
   run;
proc print;
   run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="Capture.PNG" style="width: 600px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/31952i1EB5D1709FC83016/image-size/large?v=v2&amp;amp;px=999" role="button" title="Capture.PNG" alt="Capture.PNG" /&gt;&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 22 Aug 2019 13:20:38 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Moving-Columns-to-the-left-for-every-Row/m-p/583169#M165985</guid>
      <dc:creator>data_null__</dc:creator>
      <dc:date>2019-08-22T13:20:38Z</dc:date>
    </item>
    <item>
      <title>Re: Moving Columns to the left for every Row</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Moving-Columns-to-the-left-for-every-Row/m-p/583172#M165988</link>
      <description>&lt;P&gt;Second what all the others said, having data (dates) in structure (variable names) is always a bad idea and only useful for human consumption of final results. During processing and storage, always use a "long" format.&lt;/P&gt;
&lt;P&gt;See Maxims 19 and 33.&lt;/P&gt;</description>
      <pubDate>Thu, 22 Aug 2019 13:26:20 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Moving-Columns-to-the-left-for-every-Row/m-p/583172#M165988</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2019-08-22T13:26:20Z</dc:date>
    </item>
    <item>
      <title>Re: Moving Columns to the left for every Row</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Moving-Columns-to-the-left-for-every-Row/m-p/583173#M165989</link>
      <description>&lt;P&gt;Hello&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/238046"&gt;@SNG1&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;My share of fun. I'd rather not recommend unless you know this and it's safer to use linear loop method, but FWIW&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data have;
infile cards expandtabs truncover firstobs=2;
input (ID	StartDate) ($)	_201802	_201804	_201806	_201808	_201810	_201812	_201902	_201904	_201906	_201908;
cards;
ID	Start Date	201802	201804	201806	201808	201810	201812	201902	201904	201906	201908
112	201802	500	210	525	555	565	555	598	600	521	123
231	201904	.	.	.	.	.	.	.	500	25	365
367	201806	.	.	100	256	586	265	254	2156	145	241
856	201908	.	.	.	.	.	.	.	.	.	255
245	201812	.	.	.	.	.	258	125	582	254	153
;
data want;
 set have;
 array t _201802--_201908;
 __t1=whichn(coalesce(of t(*)),of t(*));
 __k=dim(t)-__t1 +1;
 __j=peekclong(addrlong(t(__t1)),8*__k);
 call missing(of t(*));
 call pokelong(__j,addrlong(t(1)),8*__k);
 drop __:;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Thu, 22 Aug 2019 13:32:14 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Moving-Columns-to-the-left-for-every-Row/m-p/583173#M165989</guid>
      <dc:creator>novinosrin</dc:creator>
      <dc:date>2019-08-22T13:32:14Z</dc:date>
    </item>
  </channel>
</rss>

