全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
5124 2
2014-03-30
具体如下:
DATASET 可以简化如下,ID startmonth price
1        198011    12
1        198012    13
1        198101    20
1        198102    25
1        198103    10
2        201101    20
2        201102    30
2        201103    5
2        201104    8
如何通过SAS操作,找到ID为1的相应的price的最大值25,然后找到在最大值这一天(198102),之前某一天的最小价格(10),再对最大值和最小值作差,得到新的列x ?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2014-3-30 19:06:30
搞了两天,我自己解决了,和大家分享一下。先升序排,找到最大值,然后和原表合并,再对原表的价格求降序,然后得带最小值,然后把两个日期作差,区正值。就OK了~
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2014-3-30 23:18:58
liangxuebing 发表于 2014-3-30 19:06
搞了两天,我自己解决了,和大家分享一下。先升序排,找到最大值,然后和原表合并,再对原表的价格求降序, ...
The same logic can be built into a data step. See below.

DATA tmp;
input ID startmonth price;
cards;
1        198011    12
1        198012    13
1        198101    20
1        198102    25
1        198103    10
2        201101    20
2        201102    30
2        201103    5
2        201104    8
;

/**assume data is sorted**/
data tmp2;
do i=1 by -1 until(last.id);
  set tmp;
  by id ;
  if first.id then max=.;
  if price>=max then max=price;
end;

do i=1 by -1 until(max=price);
  set tmp;
  by id ;
  if first.id then min=1e308;
  if price<=min then min=price;

end;

do i=1 by -1 until(last.id);
  set tmp;
  by id ;
  diff=max-min;
  output;
end;
drop i;
run;

proc print;run;

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群