楼主: pingguzh
5997 12

请教sas变量的筛选方法 [推广有奖]

  • 0关注
  • 4粉丝

菜鸟

副教授

48%

还不是VIP/贵宾

-

威望
0
论坛币
3 个
通用积分
20.1546
学术水平
1 点
热心指数
7 点
信用等级
3 点
经验
19996 点
帖子
873
精华
0
在线时间
433 小时
注册时间
2012-10-29
最后登录
2024-1-28

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请教各位,我在data步需要根据变量X对数据集进行筛选和删除,用的是这种方法
data b;
set a;
if x=1|x=2|x=4|x=5|x=6|x=8|x=10|x=12|x=15|x=21|x=22|x=25|x=28;/*numeral type*/
run;

data b;
set a;
if y="John"|y="lily"|y="Jack"|y="Tigher"|y="Harry";/*String type*/
run;

这样的写法是不是太复杂了?请问有没有更简单的方法呢?

另一种情况是,虽然内容是数值型的,比如20150103,但是存储格式是字符型,而且由于数据来源于excel,我用if z="20150103"无法匹配,一定要用if kindex(z,"20150103")|kindex(z,"20150104")|kindex(z,"20150105")才能匹配。请问这种情况又有什么方法呢,感觉这样筛查会好复杂。




二维码

扫码加我 拉你入群

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

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

关键词:kindex string Index Harry EXCEL excel 而且

统计爱好
沙发
sushe1527 发表于 2015-3-10 10:34:44 |只看作者 |坛友微信交流群
  1. if  x in (1,2,4);

  2. if y in ("sam","Lily");
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
pingguzh + 2 + 2 + 2 精彩帖子

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

使用道具

藤椅
pingguzh 发表于 2015-3-10 10:52:48 |只看作者 |坛友微信交流群
谢谢sushe,经常能得到您的指导,万分感谢
但是我的程序还是有些问题想请教一下。
  1. data a;
  2. input  x$@@;
  3. datalines;
  4. "20150102或20150103" "20150104" "20150105" "20150106"
  5. ;
  6. data b;
  7. set a;
  8. if x in ("20150103","20150104","20150105");
  9. run;
复制代码

我想查这3个数值对应的观测,但是没法成功,请问应该怎么处理呢

使用道具

板凳
pingguzh 发表于 2015-3-10 10:55:07 |只看作者 |坛友微信交流群
即使我用了
  1. data b;
  2. set a;
  3. if x in ("20150104","20150105");
  4. run;
复制代码

也没法成功,请问这是什么问题呢?

使用道具

报纸
sushe1527 发表于 2015-3-10 11:03:45 |只看作者 |坛友微信交流群
pingguzh 发表于 2015-3-10 10:52
谢谢sushe,经常能得到您的指导,万分感谢
但是我的程序还是有些问题想请教一下。
  1. data a;
  2. length x $30.;
  3. input  x$@@;
  4. id=_n_;
  5. datalines;
  6. "20150102" "20150103" "20150104" "20150105" "20150106"
  7. ;
复制代码

使用道具

地板
pingguzh 发表于 2015-3-10 11:10:18 |只看作者 |坛友微信交流群
谢谢,我不是这个意思,变量的内容就是"20150102或20150103" "20150104" "20150105" "20150106",不能人为的将20150102和20150103分开

使用道具

7
pingguzh 发表于 2015-3-10 11:12:36 |只看作者 |坛友微信交流群
我用了
  1. data a;
  2. length x $30.;
  3. input  x$@@;
  4. id=_n_;
  5. datalines;
  6. "20150102" "20150103" "20150104" "20150105" "20150106"
  7. ;
  8. data b;
  9. set a;
  10. if x in ("20150103","20150104","20150105");
  11. run;
复制代码

这个也没法成功啊

使用道具

8
sushe1527 发表于 2015-3-10 11:28:56 |只看作者 |坛友微信交流群
pingguzh 发表于 2015-3-10 11:12
我用了
这个也没法成功啊
如果若数据导入前带“” 不想要 导入时 加dlm="""去掉
若已经进来了 需要在引号旁在加上引号
  1. data a;
  2. length x $30.;
  3. input  x$ @@;
  4. datalines;
  5. "20150102" "20150103" "20150104" "20150105" "20150106"
  6. ;
  7. data b;
  8. set a;
  9. if x in ('"20150103"' ,'"20150104"', '"20150105"');
  10. run;
复制代码

使用道具

9
pingguzh 发表于 2015-3-10 14:20:59 |只看作者 |坛友微信交流群
我都描述糊涂了,对程序不太熟悉,重新整理了一下,应该是这样
  1. data a;
  2. length x $30.;
  3. input  x$ @@;
  4. datalines;
  5. 20150102和20150103 20150104 20150105 20150106
  6. ;
  7. data b;
  8. set a;
  9. if x in ("20150103","20150104");
  10. run;
复制代码

无法得到2条数据,只能得到一条数据
我想把字段里含有20150103的这条记录也放入b数据集

使用道具

10
pingguzh 发表于 2015-3-10 14:23:04 |只看作者 |坛友微信交流群
现在的笨办法就是:
  1. data a;
  2. length x $30.;
  3. input  x$ @@;
  4. datalines;
  5. 20150102和20150103 20150104 20150105 20150106
  6. ;
  7. data b;
  8. set a;
  9. if kindex(x,"20150103")|kindex(x,"20150104");
  10. run;
复制代码

使用道具

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

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

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

GMT+8, 2024-6-16 06:45