我需要关于以下内容的建议(在SAS企业指南6.1中工作)
我有2张桌子: 表1:状态,日期,Decimal_Value,描述(字符长度4);表1包含每个州的多个描述,日期和值
表2:州,年,季度,描述(字符长度4),值; 表2具有相同状态和描述的多个记录,但值根据日期而变化。
样本表:
Table 1 state date description value 1 IA 11/1/2013 A -0.5 IA 11/1/2013 B 4.5 IA 9/1/2012 A 1.2 IA 9/1/2012 B 5 OH 6/1/2013 A 1.2 OH 6/1/2013 B -2
Table 2
State Year Quarter Description Value 2
IA 2013 4 A 40,350
IA 2013 3 A 1
IA 2013 2 A 150,000
IA 2013 1 A 100,000
IA 2012 4 A 5,000
IA 2012 3 A 25,000
IA 2012 2 B 50,000
对于表1中的每个观察,我希望能够识别与观察相关的日期,然后将表2中的值与特定状态和描述的该日期之后的1年内相加,保存总和,然后对表1中的每条记录重复一遍。
结果我正在寻找
表3state date Descr Value 1 Sum of Value 2 (over a year) IA 11/1/2013 A -0.5 =sum (Value 2 from (2013 quarter 4, 2013 quarter 3, 2013 quarter 2, 2013 quarter 1) for IA with desc = A) IA 09/1/2012 B 5.0 =sum(Value 2 from (2012 quarter 2, 2012 quarter 1, 2011 quarter 4, 2011 quarter 3) for IA with Desc = B)
我正在努力从表1中找出正确的观察结果,以便在表2中选出日期,状态和描述。
谢谢。
答案 0 :(得分:0)
最有可能的是,最简单的答案是最好的:SQL连接。将季度转换为日期而不是相反 - 我认为,将事物转换为季度更容易,因为intck
非常友好。我将在数据集或sql中显示如何执行此操作。
data Table1;
input state $ date :mmddyy10. description $ value1;
format date DATE9.;
datalines;
IA 11/1/2013 A -0.5
IA 11/1/2013 B 4.5
IA 9/1/2012 A 1.2
IA 9/1/2012 B 5
OH 6/1/2013 A 1.2
OH 6/1/2013 B -2
;;;;
data table2;
input State $ Year Quarter Description $ Value2 :comma10.;
datevar = mdy(quarter*3,1,year);
format datevar DATE9.;
datalines;
IA 2013 4 A 40,350
IA 2013 3 A 1
IA 2013 2 A 150,000
IA 2013 1 A 100,000
IA 2012 4 A 5,000
IA 2012 3 A 25,000
IA 2012 2 B 50,000
;;;;
run;
proc sql;
create table table3 as
select t1.state, t1.date,t1.description, t1.value1, sum(t2.value2) as value2sum
from table1 t1 left join table2 t2
on (t1.state=t2.state and t1.description=t2.description
and 0 le intck('Quarter',mdy(t2.quarter*3,1,t2.year),t1.date) lt 4)
group by t1.state, t1.date,t1.description,t1.value1;
quit;
您可能希望根据具体值取决于您想要包含哪些记录,而您可能需要摆弄intck
以定义季度您想要的(您要求2012Q2)在9/1/2012,这将是奇怪的,因为9/1通常是q3的一部分;如果在您的公司中不是这样,请使用intck
中的shift index来调整到您公司的季度。