楼主: 一眼瞬间
4282 12

如何删除半重复数据? [推广有奖]

  • 0关注
  • 1粉丝

讲师

50%

还不是VIP/贵宾

-

威望
0
论坛币
730 个
通用积分
0.0001
学术水平
0 点
热心指数
4 点
信用等级
0 点
经验
903 点
帖子
376
精华
0
在线时间
309 小时
注册时间
2010-3-14
最后登录
2023-8-19

楼主
一眼瞬间 发表于 2010-8-11 08:52:37 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
只是删除重复的好操作,但是不知怎么删除半重复的?

就是对于同一个公司,原先有一行的观测。
但是后来发现原先的观测不对,就在下面重新列了更正过的观测。有一列变量叫“更正次数”,比如说更正过两次,那么最后被更正过的那个观测,对应这个变量的值为“2”,前面两个观测更正次数这个变量对应的值分别为0, 和1.

如果只要留下最后一次的,而删除前面的,怎么编程呢?


不知道有没比较好的方法? 主要是不同的公司更正次数不一样,有的被更正过一次,有的被更正过两次,还有3次的。只要留下最新的那一次。

数据形状举例:

company        times of correction    other variables
a                         0                             25
a                        1                             23
a                         2                             24
b                         0                             23
c                         0                             66
c                         1                             98
d                         0                             11
e                         0                             12

上面的数据可以看到a被更正了2次,需要删除前两次
c被更正了1次,需要删除前面的一次。

需要批量进行这种处理,大家有好的方法不?

先谢过了!!!!
二维码

扫码加我 拉你入群

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

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

关键词:重复数 Correction Variables Variable company 数据 删除

回帖推荐

rdzr 发表于10楼  查看完整内容

lz,俺也来凑个热闹—— data a; input company $ times variables; cards; a 0 25 a 1 23 a 2 24 b 0 23 c 0 66 c 1 98 d 0 11 e 0 12 ; proc sort; by time; data b; set a; by company; if last.company; proc print data=b; run; 下面是程序运行的结果: Obs company times variables ...

本帖被以下文库推荐

沙发
一眼瞬间 发表于 2010-8-11 08:56:55
对应的还有file date,所以如果是留下这个公司file date 最新的一行数据应该也行。

藤椅
soporaeternus 发表于 2010-8-11 09:05:35
company+time of correction sort一下
last.company输出应该就可以了吧
已有 1 人评分学术水平 收起 理由
hopewell + 1 我很赞同

总评分: 学术水平 + 1   查看全部评分

Let them be hard, but never unjust

板凳
miniwhale 发表于 2010-8-11 09:07:54
表设计不满足BNF,有数据冗余啊:)
SQL可以这样:
select company, max(times_of_correction), other_var from Table
或者
select company, max(fiel_date), other_var from Table
大致如此,用max函数挑出最大的

报纸
soporaeternus 发表于 2010-8-11 09:23:57
sql做的话
max取出最大以后还要再连回去取出对应的字段

单就这个操作而言,data步比较简单
Let them be hard, but never unjust

地板
一眼瞬间 发表于 2010-8-11 10:10:54
sort的时候还是出问题了,是公司几年的数据,

sort完,时间就乱了。就是有列是代表公司该观测属于第几年,有一列是correction的时间。
如果只是按照两个sort
就是
proc sort XXX;
by company correction_date;
这样出来结果观测的时间就乱了,本来是按照时间序列来的,比如说2000年的所有公司排完了,接着排2002年的。(因为很多公司每年都会再出现)

这样一来,last语句也没效果了

7
一眼瞬间 发表于 2010-8-11 10:14:53
按照三个sort的话,就是把
by fical_year company correction_date;

这样last.company 也输不出来,只有零个观测。

不知道我是不是没表达清楚?

8
soporaeternus 发表于 2010-8-11 10:51:17
公司+数据时间+更正时间 排序
last.数据时间 输出......
Let them be hard, but never unjust

9
一眼瞬间 发表于 2010-8-11 11:06:59
谢谢ls高手!!!!!!

操作成功:)

10
rdzr 发表于 2010-8-11 12:51:05
lz,俺也来凑个热闹——

data a;
input company   $     times      variables;
cards;
a 0 25
a 1 23
a 2 24
b 0 23
c 0 66
c 1 98
d 0 11
e 0 12
;
proc sort;
by time;
data b;
set a;
by company;
if last.company;
proc print data=b;
run;

下面是程序运行的结果:
                                 
                              Obs    company    times    variables

                               1        a         2          24
                               2        b         0          23
                               3        c         1          98
                               4        d         0          11
                               5        e         0          12
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 03:47