<?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: Gather historical data in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/Gather-historical-data/m-p/515531#M139106</link>
    <description>&lt;P&gt;For processing, a long dataset format is to be preferred (Maxim 19). You can always transpose to wide if you need it for display.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data T3;
input id :$2. country :$10. price_t3;
cards;
44 France 3
45 Allemagne 5
46 Belgique 6
47 Espagne 7
;
run;

data T4;
input id :$2. country :$10. price_t4;
cards;
44 France 45
45 Allemagne 21
46 Belgique 6
47 Espagne 7
48 Russie 34
;
run;

%macro gather(begin,end);
data cntlin;
set
%do t = &amp;amp;begin. %to &amp;amp;end.;
  t&amp;amp;t. (keep=id country rename=(id=start country=label))
%end;
;
fmtname = 'mycountry';
type = 'C';
run;

proc sort data=cntlin nodupkey;
by start;
run;

proc format cntlin=cntlin;
run;

data final (keep=id period price);
set
%do t = &amp;amp;begin. %to &amp;amp;end.;
  t&amp;amp;t. (rename=(price_t&amp;amp;t.=price))
%end;
  indsname=inds
;
period = input(substr(scan(inds,2,'.'),2),best.);
format id $mycountry.;
run;
%mend;
%gather(3,4);


proc sort data=final;
by id;
run;

proc transpose
  data=final
  out=final_wide (drop=_name_)
  prefix=price_t
;
by id;
var price;
id period;
run;

proc print data=final_wide noobs;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Result:&lt;/P&gt;
&lt;PRE&gt;id           price_t3    price_t4

France           3          45   
Allemagne        5          21   
Belgique         6           6   
Espagne          7           7   
Russie           .          34   
&lt;/PRE&gt;
&lt;P&gt;Note how example data is presented in a data step with datalines.&lt;/P&gt;
&lt;P&gt;Also note how redundant information is kept out of the dataset by using a format.&lt;/P&gt;</description>
    <pubDate>Fri, 23 Nov 2018 11:55:06 GMT</pubDate>
    <dc:creator>Kurt_Bremser</dc:creator>
    <dc:date>2018-11-23T11:55:06Z</dc:date>
    <item>
      <title>Gather historical data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Gather-historical-data/m-p/515506#M139093</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;&lt;P&gt;I would like to gather historical data (T3 and T4) in proc sql and get this:&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;Pays&lt;/TD&gt;&lt;TD&gt;Price T3&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;id&lt;/TD&gt;&lt;TD&gt;Pays&lt;/TD&gt;&lt;TD&gt;Price T3&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;44&lt;/TD&gt;&lt;TD&gt;France&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;45&lt;/TD&gt;&lt;TD&gt;Allemagne&lt;/TD&gt;&lt;TD&gt;21&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;45&lt;/TD&gt;&lt;TD&gt;Allemagne&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;44&lt;/TD&gt;&lt;TD&gt;France&lt;/TD&gt;&lt;TD&gt;45&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;46&lt;/TD&gt;&lt;TD&gt;Belgique&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;46&lt;/TD&gt;&lt;TD&gt;Belgique&lt;/TD&gt;&lt;TD&gt;54&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;47&lt;/TD&gt;&lt;TD&gt;Espagne&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;47&lt;/TD&gt;&lt;TD&gt;Espagne&lt;/TD&gt;&lt;TD&gt;67&lt;/TD&gt;&lt;/TR&gt;&lt;TR&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;48&lt;/TD&gt;&lt;TD&gt;Russie&lt;/TD&gt;&lt;TD&gt;34&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Final:&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;Pays&lt;/TD&gt;&lt;TD&gt;Price T3&lt;/TD&gt;&lt;TD&gt;Price T4&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;44&lt;/TD&gt;&lt;TD&gt;France&lt;/TD&gt;&lt;TD&gt;3&lt;/TD&gt;&lt;TD&gt;45&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;45&lt;/TD&gt;&lt;TD&gt;Allemagne&lt;/TD&gt;&lt;TD&gt;5&lt;/TD&gt;&lt;TD&gt;21&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;46&lt;/TD&gt;&lt;TD&gt;Belgique&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;TD&gt;6&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;47&lt;/TD&gt;&lt;TD&gt;Espagne&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;TD&gt;7&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;48&lt;/TD&gt;&lt;TD&gt;Russie&lt;/TD&gt;&lt;TD&gt;&amp;nbsp;&lt;/TD&gt;&lt;TD&gt;34&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thank you&lt;/P&gt;</description>
      <pubDate>Fri, 23 Nov 2018 08:45:15 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Gather-historical-data/m-p/515506#M139093</guid>
      <dc:creator>WilliamB</dc:creator>
      <dc:date>2018-11-23T08:45:15Z</dc:date>
    </item>
    <item>
      <title>Re: Gather historical data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Gather-historical-data/m-p/515508#M139094</link>
      <description>&lt;P&gt;Hello,&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data pQ3;
    input id Country $  PriceQ3;
    cards;
44 France 3
45 Allemagne 5
46 Belgique 6
47 Espagne 7
;
run;

data pQ4;
    input id Country $ PriceQ4;
    cards;
44 France 45
45 Allemagne 21
46 Belgique 6
47 Espagne 7
48 Russie 34
;
run;

proc sql;
    CREATE TABLE P_hist AS
    SELECT COALESCE(a.id,b.id) AS id, COALESCE(a.Country, b.Country) AS country, a.PriceQ3, b.PriceQ4
    FROM pQ3 a
    FULL JOIN pQ4 b
    ON a.id=b.id;
quit;
&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Edit : added names for the calculated columns (id, Country) &lt;/P&gt;</description>
      <pubDate>Fri, 23 Nov 2018 08:58:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Gather-historical-data/m-p/515508#M139094</guid>
      <dc:creator>gamotte</dc:creator>
      <dc:date>2018-11-23T08:58:06Z</dc:date>
    </item>
    <item>
      <title>Re: Gather historical data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Gather-historical-data/m-p/515509#M139095</link>
      <description>&lt;P&gt;Can't see the logic filling variable T4, please explain it. Why do you want to solve the problem with proc sql?&lt;/P&gt;</description>
      <pubDate>Fri, 23 Nov 2018 09:04:24 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Gather-historical-data/m-p/515509#M139095</guid>
      <dc:creator>andreas_lds</dc:creator>
      <dc:date>2018-11-23T09:04:24Z</dc:date>
    </item>
    <item>
      <title>Re: Gather historical data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Gather-historical-data/m-p/515520#M139100</link>
      <description>&lt;P&gt;Why do you want to do this with PROC SQL?&lt;/P&gt;</description>
      <pubDate>Fri, 23 Nov 2018 11:21:42 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Gather-historical-data/m-p/515520#M139100</guid>
      <dc:creator>PeterClemmensen</dc:creator>
      <dc:date>2018-11-23T11:21:42Z</dc:date>
    </item>
    <item>
      <title>Re: Gather historical data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Gather-historical-data/m-p/515523#M139102</link>
      <description>&lt;P&gt;it is much easier and cleaner to do in data step using update.&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data want;
update pQ3 PQ4;
by id;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Fri, 23 Nov 2018 11:38:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Gather-historical-data/m-p/515523#M139102</guid>
      <dc:creator>kiranv_</dc:creator>
      <dc:date>2018-11-23T11:38:40Z</dc:date>
    </item>
    <item>
      <title>Re: Gather historical data</title>
      <link>https://communities.sas.com/t5/SAS-Programming/Gather-historical-data/m-p/515531#M139106</link>
      <description>&lt;P&gt;For processing, a long dataset format is to be preferred (Maxim 19). You can always transpose to wide if you need it for display.&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data T3;
input id :$2. country :$10. price_t3;
cards;
44 France 3
45 Allemagne 5
46 Belgique 6
47 Espagne 7
;
run;

data T4;
input id :$2. country :$10. price_t4;
cards;
44 France 45
45 Allemagne 21
46 Belgique 6
47 Espagne 7
48 Russie 34
;
run;

%macro gather(begin,end);
data cntlin;
set
%do t = &amp;amp;begin. %to &amp;amp;end.;
  t&amp;amp;t. (keep=id country rename=(id=start country=label))
%end;
;
fmtname = 'mycountry';
type = 'C';
run;

proc sort data=cntlin nodupkey;
by start;
run;

proc format cntlin=cntlin;
run;

data final (keep=id period price);
set
%do t = &amp;amp;begin. %to &amp;amp;end.;
  t&amp;amp;t. (rename=(price_t&amp;amp;t.=price))
%end;
  indsname=inds
;
period = input(substr(scan(inds,2,'.'),2),best.);
format id $mycountry.;
run;
%mend;
%gather(3,4);


proc sort data=final;
by id;
run;

proc transpose
  data=final
  out=final_wide (drop=_name_)
  prefix=price_t
;
by id;
var price;
id period;
run;

proc print data=final_wide noobs;
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;Result:&lt;/P&gt;
&lt;PRE&gt;id           price_t3    price_t4

France           3          45   
Allemagne        5          21   
Belgique         6           6   
Espagne          7           7   
Russie           .          34   
&lt;/PRE&gt;
&lt;P&gt;Note how example data is presented in a data step with datalines.&lt;/P&gt;
&lt;P&gt;Also note how redundant information is kept out of the dataset by using a format.&lt;/P&gt;</description>
      <pubDate>Fri, 23 Nov 2018 11:55:06 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/Gather-historical-data/m-p/515531#M139106</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2018-11-23T11:55:06Z</dc:date>
    </item>
  </channel>
</rss>

