楼主: 6皮皮9
11303 6

计算变量中位数,再将大于等于中位数的数据设置成1否则设置成0 [推广有奖]

  • 3关注
  • 3粉丝

硕士生

71%

还不是VIP/贵宾

-

威望
0
论坛币
2183 个
通用积分
2.8500
学术水平
14 点
热心指数
10 点
信用等级
9 点
经验
754 点
帖子
157
精华
0
在线时间
187 小时
注册时间
2008-12-7
最后登录
2023-12-3

20论坛币
各位好,向大家求助一个问题。
我有100个变量,1000个样本。
我要求每个变量的中位数,然后每个样本的每个变量的值若大于等于该变量的中位数则该变量的值设定为1,否则为0.
例如:
原始数据如下
       X1 X2 X3
ID1   1  2  3
ID2   2  4  4
ID3   3  3  5
计算X1 X2 X3的中位数分别是 2 3 4
转换后的数值是
       X1 X2 X3
ID1   0  0  0
ID2   1  1  1
ID3   1  1  1


怎么样样用宏来实现这个过程?
我用MEANS算出个变量的中位数,并保存下来了,但是不知道如何引用这些数值。是不是用宏函数%sysfunc(median(X1))可以解决这个问题?
请各位大侠指点!

proc means data=test median;
var x1-x100;
output out=fmedian
median=
/autoname;
run;

最佳答案

bjtoronto 查看完整内容

请参考如下程序,希望可以有帮助。如果有100个variables, 可以修改相应参数。 data test1; input x1-x3; datalines; 1 2 3 2 4 4 3 3 5 ; run; proc means data=test1; var x1-x3; output out=fmedian median(x1-x3)=xm1-xm3; run; data test2; if _n_=1 then set fmedian; set test1; array xvalue{3} x1-x3; array mvalue{3} xm1-xm3; array tvalue{3} t1-t3; do i=1 to 3; if xvalue{i} >= mvalu ...
关键词:中位数 sysfunc median output Media 样本 计算 median 中位数 如何
沙发
bjtoronto 发表于 2013-2-19 09:49:28 |只看作者 |坛友微信交流群
请参考如下程序,希望可以有帮助。如果有100个variables, 可以修改相应参数。
data test1;
input x1-x3;
datalines;
1 2 3
2 4 4
3 3 5
;
run;

proc means data=test1;
var x1-x3;
output out=fmedian
median(x1-x3)=xm1-xm3;
run;

data test2;
if _n_=1 then set fmedian;
set test1;
array xvalue{3} x1-x3;
array mvalue{3} xm1-xm3;
array tvalue{3} t1-t3;

do i=1 to 3;
   if xvalue{i} >= mvalue{i} then tvalue{i}=1;
   else tvalue{i}=0;        
end;
keep t1-t3;
run;
已有 3 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
crackman + 100 鼓励积极发帖讨论
webgu + 10 + 1 热心帮助其他会员
6皮皮9 + 5 + 5 + 5 用数组的方法也解决了这个问题,非常感谢!

总评分: 经验 + 100  论坛币 + 10  学术水平 + 6  热心指数 + 5  信用等级 + 5   查看全部评分

使用道具

藤椅
jinxi118 发表于 2013-2-19 10:06:35 |只看作者 |坛友微信交流群
帮顶

使用道具

板凳
6皮皮9 发表于 2013-2-19 10:12:33 |只看作者 |坛友微信交流群
jinxi118 发表于 2013-2-19 10:06
帮顶
THX~~~

使用道具

报纸
erzi_yhj 发表于 2013-2-19 13:20:36 |只看作者 |坛友微信交流群
data orignial;
input x1 x2 x3;
datalines
1 2 3
2 4 4
3 3 5
;
run;

proc means data=test median;
var x1-x3;
output out=fmedian
median=
/autoname;
run;

data final (keep= x1 x2 x3);
set original;
if _n_=1 then set fmedian;
x1=(x1>x1_Median);
x2=(x2>x2_Median);
x3=(x3>x3_Median);
run;

或者把Median的值存在Macro variable里就可以引用。
已有 1 人评分经验 收起 理由
crackman + 100 鼓励积极发帖讨论

总评分: 经验 + 100   查看全部评分

使用道具

地板
不正经 发表于 2013-8-11 08:40:17 |只看作者 |坛友微信交流群
erzi_yhj 发表于 2013-2-19 13:20
data orignial;
input x1 x2 x3;
datalines
受用

使用道具

7
just31415 发表于 2014-9-17 20:49:07 |只看作者 |坛友微信交流群
学习了~

使用道具

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

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

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

GMT+8, 2024-4-25 13:01