楼主: xgnfly
4234 18

[原创博文] 请教高手如何将频数小于3的观察值用缺失值替换 [推广有奖]

  • 0关注
  • 0粉丝

已卖:166份资源

本科生

40%

还不是VIP/贵宾

-

威望
0
论坛币
798 个
通用积分
0.1200
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
774 点
帖子
84
精华
0
在线时间
18 小时
注册时间
2007-6-30
最后登录
2013-8-14

楼主
xgnfly 发表于 2010-5-6 21:18:02 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请问如何将频数小于3的观察值用缺失值替换,如将下例中的4和5用“. ”代替

data a;
input x1 x2 ;
cards;
1 2
2 3
3 2
1 2
3 4
1 0
1 0
2 3
1 3
4 1
1 5
;
run;
二维码

扫码加我 拉你入群

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

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

关键词:请教高手 缺失值 cards Input Data 如何

回帖推荐

crackman 发表于9楼  查看完整内容

data a; input x1 x2 x3 x4 x5 x6 x7 x8; obs=_n_; cards; 1 2 0 6 3 4 2 2 2 3 2 3 1 0 4 1 3 2 1 2 2 3 1 6 1 3 1 7 4 1 2 6 1 2 2 3 1 0 1 1 3 4 2 2 3 4 2 2 1 0 4 1 2 3 1 6 1 3 1 7 1 5 9 5 4 1 2 6 3 6 7 4 3 2 1 2 2 3 1 6 1 3 1 7 4 1 2 6 1 2 2 3 1 0 1 1 3 4 2 2 3 4 2 2 9 9 9 9 9 9 9 9 ; run; %macro a(var); data b; set a; proc sort data=b (keep=&var. obs); by &var. ; run; data &v ...

本帖被以下文库推荐

沙发
sushe1527 发表于 2010-5-6 21:57:45
xgnfly 发表于 2010-5-6 21:18
请问如何将频数小于3的观察值用缺失值替换,如将下例中的4和5用“. ”代替

data a;
input x1 x2 ;
cards;
1 2
2 3
3 2
1 2
3 4
1 0
1 0
2 3
1 3
4 1
1 5
;
run;
是一个变量还是两个变量啊,那第二列的0,1合不合条件呢?

藤椅
xgnfly 发表于 2010-5-6 22:12:32
sushe1527 发表于 2010-5-6 21:57
xgnfly 发表于 2010-5-6 21:18
请问如何将频数小于3的观察值用缺失值替换,如将下例中的4和5用“. ”代替

data a;
input x1 x2 ;
cards;
1 2
2 3
3 2
1 2
3 4
1 0
1 0
2 3
1 3
4 1
1 5
;
run;
是一个变量还是两个变量啊,那第二列的0,1合不合条件呢?
不好意思,是两个变量,0、1也是。 如有一个变量的解决方法也请提供!

板凳
crackman 发表于 2010-5-6 22:18:23
data a;
input x1 x2 ;
x1=ifn(x1<=3,x1,.);
x2=ifn(x2<=3,x2,.);
cards;
1 2
2 3
3 2
1 2
3 4
1 0
1 0
2 3
1 3
4 1
1 5
;
run;

报纸
xgnfly 发表于 2010-5-6 22:23:20
crackman 发表于 2010-5-6 22:18
data a;
input x1 x2 ;
x1=ifn(x1
请问楼上的我的SAS显示ifn有错误,是否是因我的SAS版本8.0较低,还是什么原因,另如有几十个变量有没有更简单的方法。多谢!

地板
crackman 发表于 2010-5-6 23:03:10
第一个 肯定是你的版本有问题
我的是9.2
第二个 你的问题是什么意思呢?是说X1 X2里面 如果说某一个值的频数小于3了 就换成缺失值,例如X1有6个1,频数大于3了,那岂不是把1都换成缺失值?还是大于3的 如 4和5换成缺失值?

7
xgnfly 发表于 2010-5-6 23:08:59
6# crackman

我的问题是说X1、 X2每列里面 如果说某一个值的频数小于3了就换成缺失值,例如X1有6个1,频数大于3了就不把1换成缺失值,相反4的频数小于3次就换成缺失值。

8
crackman 发表于 2010-5-6 23:20:37
等于3呢?

9
crackman 发表于 2010-5-7 01:09:08
data a;
input x1 x2 x3 x4 x5 x6 x7 x8;
obs=_n_;
cards;
1 2 0 6        3 4        2 2
2 3 2 3        1 0        4 1
3 2 1 2        2 3        1 6
1 3        1 7 4 1        2 6
1 2        2 3        1 0        1 1
3 4        2 2        3 4        2 2
1 0        4 1        2 3        1 6
1 3        1 7        1 5        9 5
4 1        2 6        3 6 7 4
3 2 1 2        2 3        1 6
1 3        1 7 4 1        2 6
1 2        2 3        1 0        1 1
3 4        2 2        3 4        2 2
9 9 9 9 9 9 9 9
;
run;
%macro a(var);
data b;
set a;
proc sort data=b (keep=&var. obs);
by &var. ;
run;
data &var.;
set b;
by &var.;
if first.&var.=1 then do;
idx=1;
end;
else idx+1;
run;
proc sql;
create table &var. as select * ,max(idx) as num from &var. group by &var. ;
data &var.;
set &var.;
if num<3 then &var. =.;
drop num idx;
run;
quit;
%mend a(var);
%macro b;
%do i=1 %to 8;
%a(x&i.);
%end;
%mend b;
%b;
data result;
merge x1-x8;
run;

10
xgnfly 发表于 2010-5-7 09:47:47
crackman 发表于 2010-5-7 01:09
data a;
input x1 x2 x3 x4 x5 x6 x7 x8;
obs=_n_;
cards;
1 2 0 6        3 4        2 2
2 3 2 3        1 0        4 1
3 2 1 2        2 3        1 6
1 3        1 7 4 1        2 6
1 2        2 3        1 0        1 1
3 4        2 2        3 4        2 2
1 0        4 1        2 3        1 6
1 3        1 7        1 5        9 5
4 1        2 6        3 6 7 4
3 2 1 2        2 3        1 6
1 3        1 7 4 1        2 6
1 2        2 3        1 0        1 1
3 4        2 2        3 4        2 2
9 9 9 9 9 9 9 9
;
run;
%macro a(var);
data b;
set a;
proc sort data=b (keep=&var. obs);
by &var. ;
run;
data &var.;
set b;
by &var.;
if first.&var.=1 then do;
idx=1;
end;
else idx+1;
run;
proc sql;
create table &var. as select * ,max(idx) as num from &var. group by &var. ;
data &var.;
set &var.;
if num
merge应先根据obs排序
另我的版本 merge x1-x8用不起来
我修改了您的程序能给出正大确结果,但日志中提示有错误,请帮看一下错在那里
data a;
input x1 x2 x3 x4 x5 x6 x7 x8;
obs=_n_;
cards;
1 2 0 6 3 4 2 2
2 3 2 3 1 0 4 1
3 2 1 2 2 3 1 6
1 3 1 7 4 1 2 6
1 2 2 3 1 0 1 1
3 4 2 2 3 4 2 2
1 0 4 1 2 3 1 6
1 3 1 7 1 5 9 5
4 1 2 6 3 6 7 4
3 2 1 2 2 3 1 6
1 3 1 7 4 1 2 6
1 2 2 3 1 0 1 1
3 4 2 2 3 4 2 2
9 9 9 9 9 9 9 9
;
run;
%macro a(var);
data b;
set a;
proc sort data=b (keep=&var. obs);
by &var. ;
run;
data &var.;
set b;
by &var.;
if first.&var.=1 then do;
idx=1;
end;
else idx+1;
run;
proc sql;
create table &var. as select * ,max(idx) as num from &var. group by &var. ;
data &var.;
set &var.;
if num<3 then &var. =.;
drop num idx;
run;
proc sort data=&var.;
by obs;
run;
quit;
%mend a(var);
%macro b;
%do i=1 %to 8;
%a(x&i.);
if i=1 then do ; data result;set x&i.;end;
else if do;data result;merge result x&i.;run;end;
%end;
%mend b;
%b;

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

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