呵呵,对你要问的意思不是很清楚,大概说说个人理解~
问题1)和问题2)
first.order_date和last.order_date是临时变量,用来标记对于变量order_date每组不同值的第一个和最后一个观测。
<br />
if first.order_date then Count=0;<br />
Count +1;<br />
if last.order_date;<br />
应该是用来计数的吧,计算每个季度有多少观测值:对每个季度第一个观测值赋count为0,累加直到该季度的最后一个观测。
if last.order_date;是用来判断是否为特定季度的最后一个观测:
若不是,则last.order_date=0,“if last.order_date;”为false,不向下执行,返回data首部执行,即进行对count的累加;
若是,则last.order_date=1,“if last.order_date;”为true,继续向下执行,到run,输出到output,即对特定季度的count累加完成。
如对如下测试程序:
<br />
data hs;<br />
input order_date $ @@;<br />
datalines;<br />
1 1 1 2 2 3 3 3 3 4 4 4<br />
;<br />
run;<br />
proc sort data=work.hs;<br />
by order_date;<br />
run;<br />
data hs2;<br />
set hs;<br />
by order_date notsorted;<br />
if first.order_date then count=0;<br />
count+1;<br />
if last.order_date;<br />
run;<br />
得到结果
<br />
order_date count<br />
1 3<br />
2 2<br />
3 4<br />
4 3<br />
也可以试下将“if last.order_date;”这句去掉,会发现结果不同,每个观测都被输出了。</p>
问题3)
year(date)是一个函数,返回四位数字,提取参数date的年份。此程序中“where year(order_date)=2002;”提取order_date的年份,判断是否为2002年。