全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2573 3
2008-10-30

向各位SAS IML达人请教一个SAS IML调用DATA step数据的问题。程序见下方。print alpha beta可以正常输出,但是计算积分却报错,不知道是什么缘故?

注:我在写一个很复杂的宏,这是我简化的一个程序。我必须调用DATA eval里面的数
据,而不能直接在IML里面定义这些数据。

/* Define the Integrand in AUC Quaduature */
%MACRO TPR(FPR, alpha, beta);
 1-1/(1+exp((log(&FPR./(1-&FPR.))+&alpha.)*exp(&beta./2)));
%MEND TPR;
DATA eval;
 input alpha beta;
 cards;
 2.6728  -0.1220
;
RUN;
PROC IML;
 use eval;
 read all;
 print alpha beta;
 start fun(FPR);
 TPR=%TPR(FPR, alpha, beta);
 return(TPR);
 finish;
 /* Call QUAD */
 bound = { 0  1 };
 call quad(AUC, "fun", bound) eps=1E-10;
 print AUC;
QUIT;

[此贴子已经被作者于2008-11-1 19:23:30编辑过]

二维码

扫码加我 拉你入群

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

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

全部回复
2008-10-31 16:50:00

你的问题比较大,不过我按照你的已经修改了,

  start fun(FPR);
 use eval;
 read all var{alpha beta} into x;
TPR=1-1/(1+exp((log(FPR/(1-FPR))+x[1])*exp(x[2]/2)));
 return(TPR);
 finish;

二维码

扫码加我 拉你入群

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

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

2008-11-1 19:16:00

谢谢!另一种解决办法

多谢贤兄仗义相助!

有IML高手指点我另外一个办法,如果不用read all var{alpha, beta} into x,那么就在start fun(FPR) 后面加上global(alpha, beta) ,实为异曲同工:

/* Define the Integrand in AUC Quaduature */
%MACRO TPR(FPR, alpha, beta);
 1-1/(1+exp((log(&FPR./(1-&FPR.))+&alpha.)*exp(&beta./2)));
%MEND TPR;
DATA eval;
 input alpha beta;
 cards;
 2.6728  -0.1220
;
RUN;
PROC IML;
 use eval;
 read all;
 print alpha beta;
 start fun(FPR) global(alpha, beta);
 TPR=%TPR(FPR, alpha, beta);
 return(TPR);
 finish;
 /* Call QUAD */
 bound = { 0  1 };
 call quad(AUC, "fun", bound) eps=1E-10;
 print AUC;
QUIT;

二维码

扫码加我 拉你入群

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

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

2008-11-3 16:10:00
这里的global确实很妙,妙,妙
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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