我需要以下几点建议(在SAS企业指南6.1中工作)
我有两个表: Table1: State、Date、Decimal_Value、Description(Char 4);表1对每个状态有多个描述、日期和值
Table2:状态、年份、季度、描述(查尔长度4)、值;表2对同一状态和描述有多个记录,但值随日期而变化。
样本表: 表1列明日期描述值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 B5 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中的每个记录重复该值。
结果我在找 表3 IA 11/ 1 /2013 A -0.5 =sum (从2013年第4季度4、2013年第3季度、2013年第2季度、2013年第1季度)至IA 09/1/2012 B 5.0 = Sum (从(2012第2季度,2012年第1季度,2011年第4季度,第4季度,2011年第3季度)算起)
我很困惑地从表1中找出正确的观察结果,以便在表2中选择日期、状态和描述。
谢谢。
发布于 2013-10-22 17:30:02
最有可能的是,最简单的答案是这里最好的答案: SQL。将季度转换成日期,而不是相反--我认为,这比把东西转换成季度要容易,因为intck是如此友好。我在这里展示了如何在dataset或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来定义您想要的季度(您要求使用2012年9月1/2季度的2012 Q2,这很奇怪,因为9/1肯定是q3的一部分;如果在您的公司中不是这样,那么使用intck中的shift索引来调整您公司的季度)。
https://stackoverflow.com/questions/19523394
复制相似问题