首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >引线功能的使用

引线功能的使用
EN

Stack Overflow用户
提问于 2017-06-08 12:29:34
回答 2查看 1.7K关注 0票数 1

假设数据集有三列

代码语言:javascript
复制
Date   Region   Price  
01-03    A        1
01-03    A        2
01-03    B        3
01-03    B        4
01-03    A        5
01-04    B        4
01-04    B        6
01-04    B        7 

我试图通过以下代码获得按日期和区域计算的领先价格。

代码语言:javascript
复制
data want;
set have;
by _ric date_l_;
do until (eof);
set have(firstobs=2 keep=price rename=(price=lagprice)) end=eof;
end;
if last.date_l_ then call missing(lagprice);
run;

然而,想要的只有一个观察。然后创建new_date=date并尝试另一种代码:

代码语言:javascript
复制
data want;
set have nobs=nobs;
  do _i = _n_ to nobs until (new_date ne Date);
  if eof1=0 then
  set have (firstobs=2 keep=price rename=(price=leadprice)) end=eof1;
  else leadprice=.;
  end;
run;

使用此代码,SAS正在缓慢工作。所以我认为这个代码也不合适。有人能给我一些建议吗?谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-06-08 13:19:20

试着按你想要的铅价变量进行排序,然后两次设定在一起:

代码语言:javascript
复制
data test;
length Date   Region  $12 Price 8 ; 
input Date  $ Region $   Price ;
datalines; 
    01-03    A        1
    01-03    A        2
    01-03    B        3
    01-03    B        4
    01-03    A        5
    01-04    B        4
    01-04    B        6
    01-04    B        7 
    ;
run;

** sort by vars you want lead price for **;
proc sort data = test;
    by DATE REGION;
run;

** set together twice -- once for lead price and once for all variables **;
data lead_price;
    set test;
    by DATE REGION;
    set test (firstobs = 2 keep = PRICE rename = (PRICE = LEAD_PRICE))
        test (obs = 1 drop = _ALL_);
    if last.DATE or last.REGION then do; 
        LEAD_PRICE = .;
    end;
run;
票数 2
EN

Stack Overflow用户

发布于 2017-06-08 13:14:08

您可以使用proc expand按组生成数值变量的引线。尝试以下方法:

步骤1:按区域排序,日期

代码语言:javascript
复制
proc sort data=have;
    by Region Date;
run;

步骤2:创建一个新的ID变量来表示观察编号

因为每个区域的每个日期都有多个值,所以我们需要生成一个新的ID变量,以便proc expand按观察号而不是按date使用lead

代码语言:javascript
复制
data have2;
    set have;

    _ID_ = _N_;
run;

第3步:使用proc expand lead transformation按区域运行

lead将完全按照听起来的做。只要数据支持,您就可以随心所欲地获得多少值。在这种情况下,我们以一个观察为先导。

代码语言:javascript
复制
proc expand data=have2
            out=want;
    by Region;
    id _ID_;
    convert Price = Lead_Price / transform=(lead 1) ;
run;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44435835

复制
相关文章

相似问题

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