SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1070|回复: 7
打印 上一主题 下一主题

请教:如何把等级数据转换成01数据?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2007-10-7 15:03:38 | 只看该作者

请教:如何把等级数据转换成01数据?

我想把等级数据,按照平均分的大小,把它转换成01数据,而且变量较多,应该怎么做呢?
请大侠指教!!!
多谢!
数据举例:
v1- v19
5332313432423423423
4545324342334532435
3412131341353411342

按照v1-v19的平均值,高于平均值赋值1,低于平均值赋值0.

如何转制?
多谢!!!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2007-10-7 20:59:01 | 只看该作者

Re: 请教:如何把等级数据转换成01数据?

data a;
input (v1-v19)(1.);
average=mean(of v1-v19);
cards;
5332313432423423423
4545324342334532435
3412131341353411342
;
run;
data b;
set a ;
drop i average;
array v(19) v1-v19;
do i=1 to 19;
if v(i)>average then v(i)=1;
else v(i)=0;
end;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2007-10-8 15:19:37 | 只看该作者

Re: 请教:如何把等级数据转换成01数据?

多谢大侠!!!
无尽感激!!!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2007-10-8 19:28:49 | 只看该作者

Re: 请教:如何把等级数据转换成01数据?

不过,我运行了数据,结果发现此程序计算的是[b:7339a]每一观测的平均分[/b:7339a]哦。。。

那么若对[b:7339a]变量的平均分[/b:7339a]进行计算,再根据变量的平均分而进行01转换,又将如何呢?

多谢!!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2007-10-9 11:42:07 | 只看该作者

Re: 请教:如何把等级数据转换成01数据?

呵呵,那就先把数据转置了,再做以上的工作,看需要再转过来
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2007-10-9 17:10:01 | 只看该作者

Re: 请教:如何把等级数据转换成01数据?

不愧是很有经验的人!一语道破!
我用excel转置,不过由于样本量较大,所以转置的时候超过excel所能容纳的列数,所以转置的时候还要分2步走,真的很麻烦!
不知道那位高手能否提供sas的转置程序?

多谢!!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2007-10-11 09:06:34 | 只看该作者

Re: 请教:如何把等级数据转换成01数据?

data a;
infile '   ';
input v1-v62;
array v(62)v1-v62;
array v_a(62) v_a1-v_a62;
do i=1 to 62;
v_a(i)+v(i);
end;
run;
DATA b;
keep v1-v62;
array v_b(62)v_b1-v_b62;
array v_a(62) v_a1-v_a62;
array v_c(62) v_c1-v_c62;
array v(62)v1-v62;
retain v_b(62)v_b1-v_b62;
retain v_c(62) v_c1-v_c62;
   _N_ ++ (N-1);
   IF _N_ <= N THEN DO;
      SET A POINT=_N_;
          do i=1 to 62;
      v_b(i) =v_a(i) ;
          v_c(i)=v_b(i)/N;
        end;
   END;
   SET A NOBS=N;
do i =1 to 62;
if v(i)>=v_c(i) then v(i)=1;
else if v(i)<v_c(i) then v(i)=0;
end;
RUN;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2007-10-11 11:17:34 | 只看该作者

Re: 请教:如何把等级数据转换成01数据?

多谢大侠!!
好复杂~~
目前我的水平还不是很懂~~

是否可以这样:
proc transpose;
run;
进行转置,
在进行计算;
然后再转置回来?
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-4 12:09 , Processed in 0.070876 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表