首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于另一个表的索引值的SAS数据处理

基于另一个表的索引值的SAS数据处理
EN

Stack Overflow用户
提问于 2013-10-22 16:28:53
回答 1查看 89关注 0票数 1

我需要以下几点建议(在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

代码语言:javascript
复制
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中选择日期、状态和描述。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-10-22 17:30:02

最有可能的是,最简单的答案是这里最好的答案: SQL。将季度转换成日期,而不是相反--我认为,这比把东西转换成季度要容易,因为intck是如此友好。我在这里展示了如何在dataset或sql中执行此操作。

代码语言:javascript
复制
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索引来调整您公司的季度)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19523394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档