楼主: lemonxinran
2343 6

请教:重复值处理 [推广有奖]

  • 0关注
  • 1粉丝

已卖:2份资源

讲师

30%

还不是VIP/贵宾

-

威望
0
论坛币
1155 个
通用积分
6.0000
学术水平
1 点
热心指数
1 点
信用等级
1 点
经验
10334 点
帖子
188
精华
0
在线时间
605 小时
注册时间
2010-10-25
最后登录
2025-4-2

楼主
lemonxinran 发表于 2013-3-14 17:34:27 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我有一组数据,变量为:stkcd fyear ROA ROE,stkcd fyear有重复值。现在需要将stkcd fyear相同的值只出现一次的,生成新变量m=1,stkcd和fyear相同的值出现两次的,生成新变量m=2,stkcd和fyear相同的值出现三次的,生成新变量m=3.应该如何编写程序?
原数据部分如下:
stkcd fyear ROA ROE
966001  1999 0.5   0.4
966002  1999 0.51 0.41
966002  1999 0.52 0.48
966002  1999 0.79 0.41
966003  1999 0.21 0.16
966003  1999 0.51 0.46
966004  2000 0.52 0.41
......
谢谢啦!
二维码

扫码加我 拉你入群

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

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

关键词:重复值 stkcd year 编写程序 ear 编写程序 如何

沙发
jiangxinfeng 发表于 2013-3-14 17:50:16

duplicates tag stkcd fyear,gen(n)
gen m=n+1

藤椅
lemonxinran 发表于 2013-3-14 17:56:17
jiangxinfeng 发表于 2013-3-14 17:50
duplicates tag stkcd fyear,gen(n)
gen m=n+1
这个是stata的命令。在sas中实行不了,我试了。

板凳
Eternal0601 发表于 2013-3-14 18:20:29
下面的应该可以解决你的问题,你试下
data original;
input stkcd fyear ROA ROE ;
cards;
966001  1999 0.5   0.4
966002  1999 0.51 0.41
966002  1999 0.52 0.48
966002  1999 0.79 0.41
966003  1999 0.21 0.16
966003  1999 0.51 0.46
966004  2000 0.52 0.41
;
run;

proc sql noprint;
create table final as
select stkcd, fyear, n(fyear) as m
from original
group by stkcd, fyear ;
quit;

已有 1 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
Imasasor + 1 + 2 + 2 + 2 + 1 观点有启发

总评分: 经验 + 1  论坛币 + 2  学术水平 + 2  热心指数 + 2  信用等级 + 1   查看全部评分

报纸
wqhx620 发表于 2013-3-15 10:29:47
sql挺方便的

地板
lemonxinran 发表于 2013-3-15 16:38:59
Eternal0601 发表于 2013-3-14 18:20
下面的应该可以解决你的问题,你试下
data original;
input stkcd fyear ROA ROE ;
谢谢!

7
farmman60 发表于 2013-3-16 09:58:56
lemonxinran 发表于 2013-3-15 16:38
谢谢!
It is not easy like proc sql, here I try to use data step  


data want;
  set have;
  by stkcd fyear;
  lag_stkcd=lag(stkcd);
  lag_fyear=lag(fyear);
  retain obsnum;
  if first.stkcd then do;
     obsnum=0;
   end;
   if stkcd=lag_stkcd and fyear=lag_fyear then obsnum+1;
   else obsnum+1;
  if last.stkcd then output;
  keep stkcd fyear obsnum;
run;
proc print;
run;

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 20:47