<?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 &amp;quot;DO LOOP&amp;quot; not permitted in PROC SQL? in SAS Programming</title>
    <link>https://communities.sas.com/t5/SAS-Programming/quot-DO-LOOP-quot-not-permitted-in-PROC-SQL/m-p/539891#M148861</link>
    <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have bunch of files each having daily stock price of a company.&lt;/P&gt;&lt;P&gt;say, for a company named "AXIS" (in file axis.csv),&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;Date&lt;/TD&gt;&lt;TD&gt;Price&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1999-11-18&lt;/TD&gt;&lt;TD&gt;31.47353&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1999-12-27&lt;/TD&gt;&lt;TD&gt;37.77718&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1999-12-28&lt;/TD&gt;&lt;TD&gt;43.99142&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1999-12-29&lt;/TD&gt;&lt;TD&gt;51.50215&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1999-12-30&lt;/TD&gt;&lt;TD&gt;56.68813&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1999-12-31&lt;/TD&gt;&lt;TD&gt;55.30222&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2000-01-03&lt;/TD&gt;&lt;TD&gt;51.50215&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2000-01-04&lt;/TD&gt;&lt;TD&gt;47.56796&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2000-01-05&lt;/TD&gt;&lt;TD&gt;44.61731&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2000-01-06&lt;/TD&gt;&lt;TD&gt;42.91845&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2000-01-07&lt;/TD&gt;&lt;TD&gt;46.49499&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;i'm trying to:&lt;/P&gt;&lt;P&gt;&amp;nbsp;1. averaging the annual price, and then rearranging the columns and rows as:&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Firmname&lt;/TD&gt;&lt;TD&gt;1990&lt;/TD&gt;&lt;TD&gt;1991&lt;/TD&gt;&lt;TD&gt;1992&lt;/TD&gt;&lt;TD&gt;…&lt;/TD&gt;&lt;TD&gt;2019&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Axis&lt;/TD&gt;&lt;TD&gt;31.3&lt;/TD&gt;&lt;TD&gt;32.3&lt;/TD&gt;&lt;TD&gt;35.6&lt;/TD&gt;&lt;TD&gt;…&lt;/TD&gt;&lt;TD&gt;38.8&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;2. Merging all files in that folder to a sing file.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have loaded them into SAS and was trying to get average of a single year by:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
	SELECT 
		AVG(price)
	FROM
		axis
	WHERE
		year(date) = 1990;
	;
quit;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;wish I could iterate through year 1990 to 2019 but seems that DO loop won't work in PROC SQL.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Sun, 03 Mar 2019 13:46:40 GMT</pubDate>
    <dc:creator>jimmychoi</dc:creator>
    <dc:date>2019-03-03T13:46:40Z</dc:date>
    <item>
      <title>"DO LOOP" not permitted in PROC SQL?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/quot-DO-LOOP-quot-not-permitted-in-PROC-SQL/m-p/539891#M148861</link>
      <description>&lt;P&gt;Hi,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have bunch of files each having daily stock price of a company.&lt;/P&gt;&lt;P&gt;say, for a company named "AXIS" (in file axis.csv),&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;Date&lt;/TD&gt;&lt;TD&gt;Price&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1999-11-18&lt;/TD&gt;&lt;TD&gt;31.47353&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1999-12-27&lt;/TD&gt;&lt;TD&gt;37.77718&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1999-12-28&lt;/TD&gt;&lt;TD&gt;43.99142&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1999-12-29&lt;/TD&gt;&lt;TD&gt;51.50215&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1999-12-30&lt;/TD&gt;&lt;TD&gt;56.68813&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;1999-12-31&lt;/TD&gt;&lt;TD&gt;55.30222&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2000-01-03&lt;/TD&gt;&lt;TD&gt;51.50215&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2000-01-04&lt;/TD&gt;&lt;TD&gt;47.56796&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2000-01-05&lt;/TD&gt;&lt;TD&gt;44.61731&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2000-01-06&lt;/TD&gt;&lt;TD&gt;42.91845&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;2000-01-07&lt;/TD&gt;&lt;TD&gt;46.49499&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;i'm trying to:&lt;/P&gt;&lt;P&gt;&amp;nbsp;1. averaging the annual price, and then rearranging the columns and rows as:&lt;/P&gt;&lt;TABLE border="0" cellspacing="0" cellpadding="0"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;Firmname&lt;/TD&gt;&lt;TD&gt;1990&lt;/TD&gt;&lt;TD&gt;1991&lt;/TD&gt;&lt;TD&gt;1992&lt;/TD&gt;&lt;TD&gt;…&lt;/TD&gt;&lt;TD&gt;2019&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Axis&lt;/TD&gt;&lt;TD&gt;31.3&lt;/TD&gt;&lt;TD&gt;32.3&lt;/TD&gt;&lt;TD&gt;35.6&lt;/TD&gt;&lt;TD&gt;…&lt;/TD&gt;&lt;TD&gt;38.8&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;2. Merging all files in that folder to a sing file.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I have loaded them into SAS and was trying to get average of a single year by:&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
	SELECT 
		AVG(price)
	FROM
		axis
	WHERE
		year(date) = 1990;
	;
quit;&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;wish I could iterate through year 1990 to 2019 but seems that DO loop won't work in PROC SQL.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Sun, 03 Mar 2019 13:46:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/quot-DO-LOOP-quot-not-permitted-in-PROC-SQL/m-p/539891#M148861</guid>
      <dc:creator>jimmychoi</dc:creator>
      <dc:date>2019-03-03T13:46:40Z</dc:date>
    </item>
    <item>
      <title>Re: "DO LOOP" not permitted in PROC SQL?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/quot-DO-LOOP-quot-not-permitted-in-PROC-SQL/m-p/539896#M148863</link>
      <description>&lt;P&gt;Use group by in sql:&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;proc sql;
select
  year(date) as year,
  avg(price) 
from axis
group by calculated year
;
quit;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Sun, 03 Mar 2019 14:04:10 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/quot-DO-LOOP-quot-not-permitted-in-PROC-SQL/m-p/539896#M148863</guid>
      <dc:creator>Kurt_Bremser</dc:creator>
      <dc:date>2019-03-03T14:04:10Z</dc:date>
    </item>
    <item>
      <title>Re: "DO LOOP" not permitted in PROC SQL?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/quot-DO-LOOP-quot-not-permitted-in-PROC-SQL/m-p/539900#M148864</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://communities.sas.com/t5/user/viewprofilepage/user-id/215463"&gt;@jimmychoi&lt;/a&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Instead of making a per-company-analysis, you could also append all company datasets to one input dataset and avoid alle looping, like this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;/* Input data - 2 examples */
data axis;
	firmname = 'axis'; date = '01jan1990'd; price = 1; output;
	firmname = 'axis'; date = '01jan1991'd; price = 2; output;
	firmname = 'axis'; date = '01jan1992'd; price = 3; output;
	firmname = 'axis'; date = '01jan1993'd; price = 4; output;
run;
data beto;
	firmname = 'beto'; date = '01jan1990'd; price = 6; output;
	firmname = 'beto'; date = '01jan1991'd; price = 7; output;
	firmname = 'beto'; date = '01jan1992'd; price = 8; output;
	firmname = 'beto'; date = '01jan1993'd; price = 9; output;
run;

/* Append to a work data set */
data have; set axis beto;
run;

/* Calculate average price per company / year */
proc sql;
	create table wdata as 
		select
			firmname,
	  		year(date) as year,
	  		avg(price) as price
		from have
		group by firmname, calculated year
		order by firmname;
quit;

/* Transpose to get years as variables */
proc transpose data=wdata out=want(drop=_NAME_);
	by firmname;
	id year;
run;

&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-left" image-alt="cmp.gif" style="width: 427px;"&gt;&lt;img src="https://communities.sas.com/t5/image/serverpage/image-id/27625i4A73171CEF3D4EAB/image-size/large?v=v2&amp;amp;px=999" role="button" title="cmp.gif" alt="cmp.gif" /&gt;&lt;/span&gt;&lt;/P&gt;</description>
      <pubDate>Sun, 03 Mar 2019 14:30:01 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/quot-DO-LOOP-quot-not-permitted-in-PROC-SQL/m-p/539900#M148864</guid>
      <dc:creator>ErikLund_Jensen</dc:creator>
      <dc:date>2019-03-03T14:30:01Z</dc:date>
    </item>
    <item>
      <title>Re: "DO LOOP" not permitted in PROC SQL?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/quot-DO-LOOP-quot-not-permitted-in-PROC-SQL/m-p/539924#M148870</link>
      <description>&lt;BLOCKQUOTE&gt;
&lt;P&gt;"DO LOOP" not permitted in PROC SQL?&lt;/P&gt;
&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Why would you use SQL instead of a DATA step?&lt;/P&gt;</description>
      <pubDate>Sun, 03 Mar 2019 19:16:46 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/quot-DO-LOOP-quot-not-permitted-in-PROC-SQL/m-p/539924#M148870</guid>
      <dc:creator>Tom</dc:creator>
      <dc:date>2019-03-03T19:16:46Z</dc:date>
    </item>
    <item>
      <title>Re: "DO LOOP" not permitted in PROC SQL?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/quot-DO-LOOP-quot-not-permitted-in-PROC-SQL/m-p/540018#M148912</link>
      <description>&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data axis;
	firmname = 'axis'; date = '01jan1990'd; price = 1; output;
	firmname = 'axis'; date = '01jan1991'd; price = 2; output;
	firmname = 'axis'; date = '01jan1992'd; price = 3; output;
	firmname = 'axis'; date = '01jan1993'd; price = 4; output;
run;
data beto;
	firmname = 'beto'; date = '01jan1990'd; price = 6; output;
	firmname = 'beto'; date = '01jan1991'd; price = 7; output;
	firmname = 'beto'; date = '01jan1992'd; price = 8; output;
	firmname = 'beto'; date = '01jan1993'd; price = 9; output;
run;

/* Append to a work data set */
data have; set axis beto;
run;


proc tabulate data=have;
class date firmname;
format date year4.;
var price;
table firmname=' ',date=' '*price=' '*mean=' '/box='firmname';
run;&lt;/CODE&gt;&lt;/PRE&gt;
&lt;P&gt;P.S. steal the dataset from Jenson .&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 04 Mar 2019 13:34:18 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/quot-DO-LOOP-quot-not-permitted-in-PROC-SQL/m-p/540018#M148912</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2019-03-04T13:34:18Z</dc:date>
    </item>
    <item>
      <title>Re: "DO LOOP" not permitted in PROC SQL?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/quot-DO-LOOP-quot-not-permitted-in-PROC-SQL/m-p/540095#M148942</link>
      <description>&lt;P&gt;Is your goal a report that people read or a (poorly structured for many purposes) data set to feed into another process?&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Also, are your dates actual SAS date values or some character value impersonating a date? SAS date values allow a lot of manipulation that character values are a pain to work with. For example changing a format allows creating groups for reports.&lt;/P&gt;
&lt;P&gt;Below is an example of a report if the data files for the firms are combined and an appropriate format applied to a date-valued variable.&lt;/P&gt;
&lt;PRE&gt;data example;
informat date yymmdd10. price 12.5 firm $10.;
format date yymmdd10.;
input Date Price firm ;
datalines;
1999-11-18 31.47353  Axis
1999-12-27 37.77718  Axis 
1999-12-28 43.99142  Axis 
1999-12-29 51.50215  Axis 
1999-12-30 56.68813  Axis 
1999-12-31 55.30222  Axis 
2000-01-03 51.50215  Axis 
2000-01-04 47.56796  Axis 
2000-01-05 44.61731  Axis 
2000-01-06 42.91845  Axis 
2000-01-07 46.49499  Axis 
1999-11-18 32.47353  Bravo
1999-12-27 33.77718  Bravo 
1999-12-28 44.99142  Bravo 
1999-12-29 51.50215  Bravo 
1999-12-30 56.68813  Bravo 
1999-12-31 55.30222  Bravo 
2000-01-03 41.50215  Bravo 
2000-01-04 43.56796  Bravo 
2000-01-05 42.61731  Bravo 
2000-01-06 52.91845  Bravo 
2000-01-07 45.49499  Bravo 
;
run;

proc tabulate data=example;
   class firm date;
   format date year4.;
   var price;
   table firm,
         date='Year'*price*(mean min max)*f=f12.5
   ;
run;
&lt;/PRE&gt;
&lt;P&gt;Changing the format from YEAR4 to YYQ is all that would be needed to create a calendar quarter summary for each firm; YYMON format would create monthly summaries.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I show other statistics to show those are available as well.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Once you have the data combined you could filter the report to specific intervals with a WHERE statement in Proc Tabulate.&lt;/P&gt;</description>
      <pubDate>Mon, 04 Mar 2019 16:30:44 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/quot-DO-LOOP-quot-not-permitted-in-PROC-SQL/m-p/540095#M148942</guid>
      <dc:creator>ballardw</dc:creator>
      <dc:date>2019-03-04T16:30:44Z</dc:date>
    </item>
    <item>
      <title>Re: "DO LOOP" not permitted in PROC SQL?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/quot-DO-LOOP-quot-not-permitted-in-PROC-SQL/m-p/540431#M149088</link>
      <description>hi ballardw,&lt;BR /&gt;firstly, yes the dataset will be used in as a part of another dataset which contains other attributes of a firm.&lt;BR /&gt;&lt;BR /&gt;secondly, dates are just as it looks - it's a char variable.&lt;BR /&gt;&lt;BR /&gt;thanks for giving the idea. I never thought of using tabulate for this purpose, though</description>
      <pubDate>Tue, 05 Mar 2019 13:26:40 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/quot-DO-LOOP-quot-not-permitted-in-PROC-SQL/m-p/540431#M149088</guid>
      <dc:creator>jimmychoi</dc:creator>
      <dc:date>2019-03-05T13:26:40Z</dc:date>
    </item>
    <item>
      <title>Re: "DO LOOP" not permitted in PROC SQL?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/quot-DO-LOOP-quot-not-permitted-in-PROC-SQL/m-p/540455#M149096</link>
      <description>&lt;P&gt;Hi ErikLund, your code works beautifully thanks.&lt;BR /&gt;one thing, i have used below code to aggregate separate files(example):&lt;/P&gt;&lt;PRE&gt;&lt;CODE class=" language-sas"&gt;data someData;
length _xFilename $ 256;
infile "c:\temp\*.csv" filename=_xfilename;
xFilename = _xFilename;
input
@1 line $10.
;
run;&lt;/CODE&gt;&lt;/PRE&gt;</description>
      <pubDate>Tue, 05 Mar 2019 14:49:07 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/quot-DO-LOOP-quot-not-permitted-in-PROC-SQL/m-p/540455#M149096</guid>
      <dc:creator>jimmychoi</dc:creator>
      <dc:date>2019-03-05T14:49:07Z</dc:date>
    </item>
    <item>
      <title>Re: "DO LOOP" not permitted in PROC SQL?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/quot-DO-LOOP-quot-not-permitted-in-PROC-SQL/m-p/540457#M149097</link>
      <description>Hi Kshap, this is awesome and works beautifully.&lt;BR /&gt;But is there way to export that tabulated table to a dataset? i have tried putting out= option but the exported dataset looks different from the tabulated one.</description>
      <pubDate>Tue, 05 Mar 2019 14:51:13 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/quot-DO-LOOP-quot-not-permitted-in-PROC-SQL/m-p/540457#M149097</guid>
      <dc:creator>jimmychoi</dc:creator>
      <dc:date>2019-03-05T14:51:13Z</dc:date>
    </item>
    <item>
      <title>Re: "DO LOOP" not permitted in PROC SQL?</title>
      <link>https://communities.sas.com/t5/SAS-Programming/quot-DO-LOOP-quot-not-permitted-in-PROC-SQL/m-p/540733#M149218</link>
      <description>&lt;P&gt;If you want a table , then try other's code . my code is for a&amp;nbsp; REPORT .&lt;/P&gt;</description>
      <pubDate>Wed, 06 Mar 2019 11:27:58 GMT</pubDate>
      <guid>https://communities.sas.com/t5/SAS-Programming/quot-DO-LOOP-quot-not-permitted-in-PROC-SQL/m-p/540733#M149218</guid>
      <dc:creator>Ksharp</dc:creator>
      <dc:date>2019-03-06T11:27:58Z</dc:date>
    </item>
  </channel>
</rss>

