全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1760 2
2009-06-21
嗯就是想实现这么个结果,就是一组数据比如说有一百个观测,这些数据是按日期date排列的,包括不同公司firm的。然后有一个变量是sto.然后我想筛选一下这些数据,就是分别对于每个公司,sto一超过某一个数,就不要这个公司这个观测以后的所有数据。例如,
下面数据中,只要sto大于2,共一组公司内,这个观测以后的数据都不要

date firm sto
1      1      1.1
2      1      1.3
3      1      2.1
4      1      1.1
5      1      2.3
1      2      1.1
2      2      2.1
3      2      1.5

最后结果想是这样
date firm sto
1      1      1.1
2      1      1.3
3      1      2.1
1      2      1.1
2      2      2.1

请问如何通过SAS实现?

是个新手。多谢大牛指教!~
二维码

扫码加我 拉你入群

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

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

全部回复
2009-6-21 22:16:59
1# dingdang15

proc sql;

         create table table_b as select
                    firm
                  ,min(date)                   as mindate
          from table table_a
          where sto>2;
quit;

Data final;
merge table_a (in=a)
           table_b (in=b);
by firm;
if a and b;
if date<=mindate;
run;

我家里没有安装SAS,所以没有测试,以上程序是假设你的数据都是排好序了。如果数据量小的话,也可以用一个SQL写下来。另外的方法,可以用DATA STEP,设置个标记,检测STO个是不是曾经超过2,以及FIRM是不是还是同一个。
二维码

扫码加我 拉你入群

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

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

2009-6-22 10:46:47
Try this code. It works.

data firm;
input date firm sto;
cards;
1      1      1.1
2      1      1.3
3      1      2.1
4      1      1.1
5      1      2.3
1      2      1.10
2      2      2.1
3      2      1.5
;
run;

proc sort data=firm;
by firm date ;
run;

data screen(drop=keep);
set firm;
        by firm;
        retain keep;
        if first.firm then keep=1;
        if sto>2 then keep=0;
        if keep;
run;
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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