楼主: playmore
4553 10

如何计算序列的重复次数 [推广有奖]

学科带头人

2%

还不是VIP/贵宾

-

TA的文库  其他...

R相关

经济学相关

金融工程

威望
1
论坛币
16309 个
通用积分
7.1997
学术水平
372 点
热心指数
394 点
信用等级
341 点
经验
15297 点
帖子
1194
精华
1
在线时间
1331 小时
注册时间
2007-1-11
最后登录
2023-12-15

初级学术勋章 初级热心勋章 中级热心勋章

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
有如下的数据集

data have;
input ByFactors $ Flag;
datalines;
a 1
a 1
a 1
a 0
a 0
a 1
b 1
b 0
b 0
b 1
b 1
;
run;

现在我想计算分ByFactrors的Flag序列的重复次数,即得到如下的结果
a 1 3
a 1 3
a 1 3
a 0 2
a 0 2
a 1 1
b 1 1
b 0 0
b 0 0
b 1 1
b 1 1

不知道我说清楚没有。有没有一个简便的方法,一个数据步或SQL步可以完成的。我开始想过用IML,但是需要区分ByFactrors,所以不能直接用IML。请高手指教。

二维码

扫码加我 拉你入群

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

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

关键词:factors factor Input Lines Facto 计算 如何

本帖被以下文库推荐

playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛
沙发
ziyenano 发表于 2013-1-5 13:56:51 |只看作者 |坛友微信交流群
proc sql;
create table have1 as
select a.*,b.count from have a
inner join
(select *,count(1) as count from have group by ByFactors,Flag) b
on a.ByFactors=b.ByFactors and a.flag=b.flag;
quit;

使用道具

藤椅
playmore 发表于 2013-1-5 14:13:20 |只看作者 |坛友微信交流群
ziyenano 发表于 2013-1-5 13:56
proc sql;
create table have1 as
select a.*,b.count from have a
多谢回复,但是结果不对

可能在from子句里内连结时用的on子句并不准确,因为ByFactors和Flag并不是原表格的主码,不能唯一确定一个观测

另外还有Flag也不一定就为1或0,可能有其他值,希望解决方法可以考虑这一点

多谢了!
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

使用道具

板凳
ziyenano 发表于 2013-1-5 14:43:44 |只看作者 |坛友微信交流群
playmore 发表于 2013-1-5 14:13
多谢回复,但是结果不对

可能在from子句里内连结时用的on子句并不准确,因为ByFactors和Flag并不是原 ...
不是,是我理解错了,我以为是把汇总数据count加在后面

使用道具

报纸
ziyenano 发表于 2013-1-5 14:53:50 |只看作者 |坛友微信交流群
这个结果是怎么得到的,不是很理解
b 0 0
b 0 0
b 1 1
b 1 1

使用道具

地板
louislau2010 发表于 2013-1-5 14:58:40 |只看作者 |坛友微信交流群
楼主的结果错了吧,结果应该是汇总的呀

使用道具

7
playmore 发表于 2013-1-5 15:46:20 |只看作者 |坛友微信交流群
louislau2010 发表于 2013-1-5 14:58
楼主的结果错了吧,结果应该是汇总的呀
我的意思是有一个序列,可以这么看
根据ByFactors区别不同的股票
用Flag标示跑赢或者跑输指数
现在想要得到新的一列
标示每次连赢或者连输的次数
且最好就在原表右侧加上一列
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

使用道具

8
Imasasor 发表于 2013-1-5 16:09:59 |只看作者 |坛友微信交流群
  1. data have;
  2. input ByFactors $ Flag;
  3. datalines;
  4. a 1
  5. a 1
  6. a 1
  7. a 0
  8. a 0
  9. a 1
  10. b 1
  11. b 0
  12. b 0
  13. b 1
  14. b 1
  15. ;
  16. run;

  17. data b;
  18. set have;
  19. retain num y;
  20. if first.flag then num=1;
  21. else num+1;
  22. if _n_=1 and first.flag=1 then y=1;
  23. else if first.flag=1 then y+1;
  24. by byfactors  flag notsorted;
  25. run;

  26. proc sort data=b;
  27. by y descending num;
  28. run;

  29. data c(drop=y num);
  30. set b;
  31. retain count;
  32. if first.y then count=num;
  33. by y;
  34. run;
复制代码
麻烦一点,但应该是你要的结果
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

使用道具

9
playmore 发表于 2013-1-5 16:35:21 |只看作者 |坛友微信交流群
Imasasor 发表于 2013-1-5 16:09
麻烦一点,但应该是你要的结果
嗯,多谢
学习了by子句中加notsorted

我之前写了一个,主要是新加一个排序变量,OrderVar=_N=_
然后正着算得到次数,然后反过来再retain赋个值

不知道用SQL还有办法处理吗?
如何在SQL中用COUNT或SUM,得到的结果列直接以原始表格的形式存放呢?
即每个观测值都连上属于该group的统计值呢?
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

使用道具

10
ziyenano 发表于 2013-1-5 16:53:41 |只看作者 |坛友微信交流群
这样的理解,最后四行还是和你列出来的不一样
data have1;
set have;
retain id 0;
by byfactors flag notsorted;
if first.byfactors or first.flag then id ++1;
run;

proc sql;
create table have2 as
select byfactors,flag,count(1) as count from have1
group by id;
quit;

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-13 01:20