全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
2013 5
2013-09-20
请教诸位大侠,如何将下面的SAS程序翻译成R?

data caq;

  infile "E:\Modality Properties\caq.dat";

  input i1 i2 i3 i4 i5 i6 i7 i8 i9 i10 i11 i12;

run;


/* Code does not need to be altered until the last two lines. */


OPTIONS NODATE NOSTIMER LS=120 PS=60;


%macro alphaest(DATAset=_last_, vars=, prb=.05, out=parm);


PROC IML;


USE &DATAset;

READ all var {&vars} into data;

prob = &prb;


/*-- Define IML module ---*/

start scalpha(data,prob);

  * reset print;

  parm = J(1,7,.);  /* create return vector: row */

  nsub = NROW(data); /* number of subjects */

  nvar = NCOL(data); /* number of variables */

  nv2  = nvar*(nvar+1)/2;

  rsub = 1. / nsub; rs1 = 1. / (nsub - 1.);

  vrat = nvar / (nvar-1.);

  mean = data[+,] / nsub;  /* row vector */

  /* for prob=.05: quant should be 1.96 */

  quant = probit(1. - .5*prob);

  print "Prob and Quant:", prob,quant;


  /* Compute COV Matrix cov[nvar,nvar] */

  cov = rs1 * (data` * data - nsub * mean` * mean);

  print cov [colname= { &vars} ];

  vvar = vecdiag(cov);  /* variances in diag of cov */

  summat = cov[+,+]; /* sum entire cov matrix */

  sumvars = vvar[+]; /* sum diagonal of cov matrix */

  sumcovs = .5*(summat - sumvars); /* sum off diag of cov matrix */

  /* only for normal theory ASE:

     get wcv[nvar,nvar], wvv[nvar] */

  wcv = cov * cov;

  wvv = vecdiag(wcv);

  sumvar2 = wvv[+];

  summat2 = wcv[+,+];


  alpha = vrat * (1. - sumvars/summat);

  parm[1] = alpha;              /* alpha */


  /*--- Compute Normal ASE ----*/

  tmp = 2. * vrat*vrat / (summat*summat*summat);

  t1 = summat * sumvar2;

  t2 = summat * sumvars*sumvars;

  t3 = 2.*sumvars * summat2;

  nase = tmp*(t1 + t2 - t3);

  nase = sqrt(rsub*nase);

  parm[2] = nase; /* NT standard error */

  parm[3] = alpha - quant * nase; /* NT CI lower */

  parm[4] = alpha + quant * nase; /* NT CI upper */


  /*--- Compute ADF ASE ----*/

  /* set symm matrix jac[nvar,nvar] */

  dwrtvar = -2. * vrat * sumcovs / (summat*summat);

  dwrtcov =       vrat * sumvars / (summat*summat);

  jac = J(nvar,nvar,dwrtcov);

  /* set diagonal */

  do j= 1 to nvar;

    jac[j,j] = dwrtvar;

  end;


  /* run through data[nsub,nvar] */

  trac = 0.;

  do isub=1 to nsub;

    v = data[isub,] - mean; /* row vector */

    /* note the off diagonal entries are used

       twice, that's why jac[] was changed */

    wcv = jac # (v` * v - cov);

    tmp = wcv[+,+];

    trac = trac + tmp * tmp;

  end;

  nnase = sqrt(rsub*rs1*trac);

  parm[5] = nnase; /* ADF standard error */

  parm[6] = alpha - quant * nnase; /* ADF CI lower */

  parm[7] = alpha + quant * nnase; /* ADF CI upper */

return(parm);

finish scalpha;


/*--- Call the IML Module ---*/

parm = scalpha(data,prob);  /* parm[7] should be row vector */


/*--- Fill output data set ---*/

nams = { Alpha NT_SE NT_LCI NT_UCI ADF_SE ADF_LCI ADF_UCI };

create out from parm[colname=nams];

append from parm;

/* end of the macro alphaest */

%mend;


/* Example */

/* Only code below this point needs to be changed. The dataset name and variable names must be specified. Only bolded text needs to be changed. */

/* Call the macro */


%alphaest(dataset=caq,vars=i1 i2 i3 i4 i5 i6 i7 i8 i9 i10 i11 i12,        prb=.05, out=parm);


/* Print the results */

proc print data=out; run;


多谢!





二维码

扫码加我 拉你入群

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

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

全部回复
2013-9-20 12:21:51
这程序是干嘛的?
二维码

扫码加我 拉你入群

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

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

2013-9-20 17:52:13
ADF问题中的一个程序
二维码

扫码加我 拉你入群

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

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

2013-9-20 23:06:43
ADF 是啥啊?
二维码

扫码加我 拉你入群

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

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

2013-9-21 06:20:44
二维码

扫码加我 拉你入群

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

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

2013-9-21 18:56:00
ryusukekenji 发表于 2013-9-21 06:20
http://www.r-bloggers.com/sas-macro-simplifies-sas-and-r-integration/
http://cran.r-project.org/web ...
第三个网页亮了。。。。R真心*****强大啊
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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