楼主: lemonxinran
8358 15

sas如何分组进行if语句的判断 [推广有奖]

  • 0关注
  • 1粉丝

已卖:2份资源

讲师

30%

还不是VIP/贵宾

-

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

楼主
lemonxinran 发表于 2013-1-24 17:39:06 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请教:我的数据是这样:包括变量stkcd  date   price,stkcd是股票代码,date是日期,price是股价。数据举例如下:
stkcd  date   price
000001  19990101 5
000001  19990102 6
...
000001 19990130  7
000001 19990201  8
000001 19990202  8
...
000001 19990228 7.5
000002 ...
现在需要判断,对于同一支股票,如果在一个月内只要有一天的股价小于等于五元,则输出test=1;否则test=0。
即生成表:
stkcd yearmonth test
000001  199901  1
000001  199902  0
...
这个应该如何分组进行判断呢?谢谢啦!




二维码

扫码加我 拉你入群

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

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

关键词:stkcd Price month Rice date 如何

沙发
Imasasor 发表于 2013-1-24 18:06:08
  1. data a;
  2. input stkcd  date:yymmdd8.   price;
  3. format date yymmdd8.;
  4. cards;
  5. 000001  19990101 5
  6. 000001  19990102 6
  7. 000001 19990130  7
  8. 000001 19990201  6
  9. 000001 19990202  8
  10. 000001 19990228 7.5
  11. ;
  12. run;
  13. data b;
  14. set a;
  15. month=input(compress(year(date)!!month(date)),best12.);
  16. run;
  17. proc sql;
  18. create table final as
  19. select stkcd,month,min(price)<=5 as test from b
  20. group by stkcd, month;
  21. quit;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
webgu + 1 + 1 + 1 我很赞同

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

藤椅
webgu 发表于 2013-1-24 18:41:52
Imasasor 发表于 2013-1-24 18:06
data b ;
  set a;
month=put(date,yymmnn6.);
run;

***************************
本想一次在SQL搞定,没成功。
proc sql;
   select stkcd, date   as yearmonth format=yymmn6.  , min(price)<=5  as test
   from a
   group by  stkcd  date    /*format=yymmn6. */ ;  /*help me ,如果不生成新变量能实现?*/
quit;
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

板凳
Imasasor 发表于 2013-1-24 18:44:25
webgu 发表于 2013-1-24 18:41
data b ;
  set a;
month=put(date,yymmnn6.);
明白你的意思,但是不知道在group by的时候能不能利用它的format group,可能不可以,sas应该利用它存的真实值来group的
欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

报纸
Imasasor 发表于 2013-1-24 18:51:55
webgu 发表于 2013-1-24 18:41
data b ;
  set a;
month=put(date,yymmnn6.);
yes, it works
  1. data a;
  2. input stkcd  date:yymmdd8.   price;
  3. format date yymmdd8.;
  4. cards;
  5. 000001  19990101 5
  6. 000001  19990102 6
  7. 000001 19990130  7
  8. 000001 19990201  6
  9. 000001 19990202  8
  10. 000001 19990228 7.5
  11. ;
  12. run;

  13. proc sql;
  14. create table final as
  15. select stkcd,put(date,yymmn6.) as month,min(price)<=5 as test from a
  16. group by stkcd, month;
  17. quit;
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
pobel + 1 + 1 + 1 我很赞同

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

欢迎加入亚太地区第一R&Python数据挖掘群: 251548215;

地板
webgu 发表于 2013-1-24 18:52:25
Imasasor 发表于 2013-1-24 18:44
明白你的意思,但是不知道在group by的时候能不能利用它的format group,可能不可以,sas应该利用它存的真 ...
嗯,在data步class语用里可以按 formated var 分组统计。在proc sql里的确实不好弄。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

7
webgu 发表于 2013-1-24 19:00:38
Imasasor 发表于 2013-1-24 18:51
yes, it works
哎,没办法。还是要生成一个新变量。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

8
ziyenano 发表于 2013-1-24 19:46:39
webgu 发表于 2013-1-24 18:41
data b ;
  set a;
month=put(date,yymmnn6.);
这样行不?
data ex;
input
stkcd  date $  price ;
cards;
000001  19990101 5
000001  19990102 6
000001 19990130  7
000001 19990201  8
000001 19990202  8
000001 19990228 7.5
;
run;

proc sql;
create table ex1 as
select stkcd,input(date,6.0) as date,min(price)<=5 as test
from ex
group by 1,2;
quit;

9
webgu 发表于 2013-1-24 20:42:11
ziyenano 发表于 2013-1-24 19:46
这样行不?
data ex;
input
嗯,差不多只能这样。好你没法只用FORMAT不生成新变量来做。
SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

10
lemonxinran 发表于 2013-1-24 20:55:21
Imasasor 发表于 2013-1-24 18:06
非常感谢!!!

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

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