全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
4129 5
2013-04-04
现在有数据集c,它包含一个变量ARL,有10个观测;另有有个数据集s,它包含一个变量sARL,也有10个观测;用merge将两个数据集合并后,发现后并后的数据集中只有一个变量ARL,这是怎么回事啊?
二维码

扫码加我 拉你入群

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

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

全部回复
2013-4-4 16:16:48
楼主把代码贴出来会更容易判断。
二维码

扫码加我 拉你入群

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

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

2013-4-4 16:22:27
pobel 发表于 2013-4-4 16:16
楼主把代码贴出来会更容易判断。
data c;
set ci_shifts_drifts;
if n=. then delete;
if cat='shifts' then output;
label ARL_sARL='ARL';drop n cat;
run;
data s;
set ci_shifts_drifts;
if n=. then delete;
if cat='drifts' then output;
label ARL_sARL='sARL';drop n cat;
run;
data last;
merge c s ;run;
二维码

扫码加我 拉你入群

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

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

2013-4-4 16:30:32
pobel 发表于 2013-4-4 16:16
楼主把代码贴出来会更容易判断。
libname DATA 'c:\SASDATA';

data DATA.ab;

  a=-0.618;

  b=1.618;

  v=1+a*a;

  u=1+(1-a)**2;

  t=1+b*b;

  s=1+(b-1)**2;

  la=2*log(v/u);

  lb=2*log(t/s);

  c=la/log(1+a*a);

  d=lb/log(1+b*b);

  keep c d;

run;


proc fcmp outlib=sasuser.funcs.math_stat;

  function lstar(u,c,d);

    if (u le  -0.618) then return (c*log(1+u*u));

    if (u ge   1.618) then return (d*log(1+u*u));

      else  return(2*log((1+u*u)/(1+(u-1)*(u-1))));

  endsub;

  function g(u);

    if (u le  -0.25) then return (2*log((1+0.25*0.25)/(1+1.25*1.25)));

    if (u ge   1.25) then return (2*log((1+1.25*1.25)/(1+0.25*0.25)));

      else return(2*log((1+u*u)/(1+(u-1)*(u-1))));

  endsub;

run;


options cmplib =sasuser.funcs;


%let r =10000;

data lstar;

  call streaminit(1234);
  set data.ab;

  do sample =1 to &r;

    call missing(sum1, sum2);

    do i =1 to 2000;

      x     =rand('T',3)  ;

      y     =x/sqrt(3)    ;

      lstar =lstar(y,c,d) ;

      l     =g(y)         ;

      sum1 ++lstar; sum2 ++l;

      if (sum1 lt 0) then sum1=0;

      if (sum2 lt 0) then sum2=0;

      output;

    end;

  end;

  keep sample i sum1 sum2;

run;


data shifts_drifts;
  set lstar;

  by sample;

  array _n[10] _temporary_ (1 2 3 4 5 6 7 8 9 10);

  array _s[10] _temporary_;  array _d[10] _temporary_;

  if first.sample then call missing(of _s
  • _d
  • );

      do k =1 to dim(_n);

        if _s[k] <1 then if (sum1 ge (2.01+0.01*(_n[k]-1))) then do;
          _s[k] =1; n =_n[k]; cat ='shifts';
          output shifts_drifts;
    keep sample n i cat;
        end;

        if _d[k] <1 then if (sum2 ge (2.01+0.01*(_n[k]-1))) then do;
          _d[k] =1; n =_n[k]; cat ='drifts';

          output shifts_drifts;
    keep sample n i cat;
        end;

      end;
    run;

      

    proc means data=shifts_drifts;

      class n cat;

      var i;

      output out=ci_shifts_drifts(drop =_freq_ _type_) mean=ARL_sARL;

    run;

    data h;
    do h=2 to 2.09 by 0.01;
    output;end;run;
    data c;
    set ci_shifts_drifts;
    if n=. then delete;
    if cat='shifts' then output;
    label ARL_sARL='ARL';drop n cat;
    run;
    data s;
    set ci_shifts_drifts;
    if n=. then delete;
    if cat='drifts' then output;
    label ARL_sARL='sARL';drop n cat;
    run;
    data l;
    merge c s h ;run;
    proc gplot data=last;
    plot ARL*h=1 sARL*h=2/overlay;
    symbol1 i=join v=none;
    symbol2 i=join v=none;
    run;
  • 二维码

    扫码加我 拉你入群

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

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

    2013-4-4 21:11:03
    你看到的是变量标签,不是变量名。
    变量名均为ARL_sAR。
    二维码

    扫码加我 拉你入群

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

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

    2013-4-4 22:47:32
    label害死人呐
    二维码

    扫码加我 拉你入群

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

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

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

    说点什么

    分享

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