全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2101 9
2012-11-16
悬赏 300 个论坛币 已解决
遇到一个很苦闷的问题,想了一个下午,请老师们帮帮我,谢谢;

现有结构如下:

%macro main;

...

data _null_;
set def;  //def数据集见下文
call symput(?,?);  //困难所在
run;

%mend;

问题描述:
1.我想针对数据集def中的每一个变量,对相应P值做一个判断,利用symput函数向data外,%main内抛出十个宏变量,例如&pv1 ... &pv10
2.如果P值小于0.05,则该宏变量累加1,例如,这次循环&pv1为1,&pv10为0(例如下次循环&pv1为2)
0.还有一点:我估计在data步外面套一个%do循环应该可以解决问题,但是这样做会效率很低,特别想数据集生成一次就得到10个宏变量,不然以后加上百上千次模拟,可能SAS吃不消。

老师应该已经看得出来我的意图了,我想模拟数据集算P值比率:检验效能。
求帮助,谢谢,谢谢。

附:def数据集如下:
Variable P-value
v1
0.64
v2 0.08
v3 0.06
v4 0.04
v5 0.01
v6 0.01
v7 0.01
v8 0.01
v9 0.01
v10 0.01



最佳答案

二维码

扫码加我 拉你入群

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

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

全部回复
2012-11-16 00:27:36
复制代码
或者SQL
复制代码


二维码

扫码加我 拉你入群

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

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

2012-11-16 09:38:13
是不是这个意思?
data def;
input
Variable $ P_value;
cards;
v1   0.64
v2         0.08
v3         0.06
v4         0.04
v5         0.01
v6         0.01
v7         0.01
v8         0.01
v9         0.01
v10         0.01
;
run;

data _null_;
set def;
call symput('P'||compress(variable),P_value);
run;
%put &Pv1 &Pv2 &Pv3 &Pv4 &Pv5 &Pv6 &Pv7 &Pv8 &Pv9 &Pv10;
二维码

扫码加我 拉你入群

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

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

2012-11-16 09:57:49
ziyenano 发表于 2012-11-16 09:38
是不是这个意思?
data def;
input
ziye老师,你的回复给了我一些提示,谢谢。

不过问题还是没解决,我现在最主要的问题是:通过这一data步后,给这十个宏变量中的某几个自加一。
所以这个data步运行多少次,这其中的宏变量就会依照条件不停自加。
二维码

扫码加我 拉你入群

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

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

2012-11-16 10:22:17
Tigflanker 发表于 2012-11-16 09:57
ziye老师,你的回复给了我一些提示,谢谢。

不过问题还是没解决,我现在最主要的问题是:通过这一data ...
这个意思?
复制代码
二维码

扫码加我 拉你入群

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

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

2012-11-16 10:36:08
这样?
data def;
input
Variable $ P_value;
cards;
v1   0.64
v2         0.08
v3         0.06
v4         0.04
v5         0.01
v6         0.01
v7         0.01
v8         0.01
v9         0.01
v10         0.01
;
run;
/*第一次的时候*/
data _null_;
set def;
if P_value>0.05 then PP=1;
else PP=0;
call symput('P'||compress(variable),PP);
run;
%put &Pv1 &Pv2 &Pv3 &Pv4 &Pv5 &Pv6 &Pv7 &Pv8 &Pv9 &Pv10;
/*不是第一次*/
data _null_;
set def;
if P_value>0.05 then PP=symget('P'||compress(variable))+1;
else PP=symget('P'||compress(variable));
call symput('P'||compress(variable),PP);
run;
%put &Pv1 &Pv2 &Pv3 &Pv4 &Pv5 &Pv6 &Pv7 &Pv8 &Pv9 &Pv10;
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群