SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

12
返回列表 发新帖
楼主: shiyiming
打印 上一主题 下一主题

以下的程序怎么编程

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
11#
 楼主| 发表于 2009-5-13 20:45:34 | 只看该作者

Re: 以下的程序怎么编程

即使要追求简洁,也要保证以正确为前提。
sXLION的程序有以下欠考虑1。处理缺失值,2。K=0,3。K>=N
没有任何不敬。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
12#
 楼主| 发表于 2009-5-14 08:29:48 | 只看该作者

Re: 以下的程序怎么编程

经常看SAS-L和SUGI,都是那里边出来的。。
SAS-L上的大师确实太牛~~~
monotonic()跟DB里的rownum一样,但是功能现在还不健全,所以没有列出来。
proc slq还有很多其他的options比较强大。。不过都没有结束测试,还没有上reference..
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
13#
 楼主| 发表于 2009-5-14 11:48:21 | 只看该作者

Re: 以下的程序怎么编程

to deshengsu
你可以把里面的数值做缺失值看看。
另考虑k=0和k>=N,您认为有意义吗?
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
14#
 楼主| 发表于 2009-5-21 02:18:37 | 只看该作者

Re: 以下的程序怎么编程

data result (keep=mean_a_dif mean_b_dif);
     retain mean_a mean_b;
    set ahuige end=last;
    total_a+a;
    if not missing(a) then num_a+1;
    total_b +b;
    if not missing(b) then num_b+1;
    if _N_=&k. then do;
       mean_a=total_A/num_a;
       mean_b=total_b/num_b;
       total_a=0;
       num_a=0;
       total_b=0;
       num_b=0;
    end;
    if last then do;
       mean_a_dif=mean_a-total_a/num_a;
       mean_b_dif=mean_b-total_b/num_b;
       output;
    end;
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
15#
 楼主| 发表于 2009-5-21 23:31:46 | 只看该作者

Re: 以下的程序怎么编程

[quote="deshengsu":3que81hy]即使要追求简洁,也要保证以正确为前提。
sXLION的程序有以下欠考虑1。处理缺失值,2。K=0,3。K>=N
没有任何不敬。[/quote:3que81hy]

不好意思,才明白你的意思。

不将缺失值计算在内,mean=总和/项数(不包含缺失项)                  

如果是2的话:

[code:3que81hy]data ahuige;
  input A B;
cards;
. 3
2 3
5 7
7 9
;
run;

%let k=2;
data ex(keep=ma mb);
   set ahuige nobs=n;
  if &k. ge _N_ then
      do;
          aa1+A;bb1+B;
           if missing(A) then missa1+1;
                   if missing(B) then missb1+1;
        end;
      else do;
           aa2+A;bb2+B;
                    if missing(A) then missa2+1;
                    if missing(B) then missb2+1;
            end;

  if _N_=n then
        do;
           ma=aa1/(&k.-missa1)- aa2/(n-&k.-missb1);
           mb=bb1/(&k.-missa2)- bb2/(n-&k.-missb2);
           output;
        end;
   run;[/code:3que81hy]


ps:不好意思,记错了。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
16#
 楼主| 发表于 2009-5-21 23:36:38 | 只看该作者

Re: 以下的程序怎么编程

1,将缺失项计算在内,mean=总和/项数(包含缺失项) 这种算法是SAS函数mean()默认的。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
17#
 楼主| 发表于 2009-5-21 23:43:37 | 只看该作者

Re: 以下的程序怎么编程

data trial;
y=mean(1,.,3);
;
proc print;run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
18#
 楼主| 发表于 2009-5-22 01:21:30 | 只看该作者

Re: 以下的程序怎么编程

[code:26prqt1b]data ahuige;
  input A B;
cards;
1 2
1 2
. 3
2 3
5 7
7 9
;
run;
%let k=2;
proc sql;
select mean(a), mean(b),&k+1 into :ma1, :mb1, :k1 from ahuige(obs=&k.);
select &ma1.- mean(a),&mb1.- mean(b)  into :ma2,:mb2 from ahuige(firstobs = &k1. );
quit;[/code:26prqt1b]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
19#
 楼主| 发表于 2009-5-22 01:22:09 | 只看该作者

Re: 以下的程序怎么编程

[code:3uuadprv]data ahuige;
  input A B;
cards;
. 3
2 3
5 7
7 9
;
run;
%let k=2;

proc sql ;
select mean(a), mean(b) into :ma1, :mb1 from ahuige where monotonic() le &k.;
select &ma1.-mean(a),&mb1.-mean(b) into :ma,:mb from ahuige where monotonic() gt &k.;
quit;[/code:3uuadprv]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
20#
 楼主| 发表于 2009-5-22 07:09:46 | 只看该作者

Re: 以下的程序怎么编程

真的非常佩服楼上的各位大师!可以问问你们是怎么找出这么多种巧妙脱俗的方法地呢?你们可以进一步谈谈解决这个问题的思路及感想吗?莫非冥冥之中真有注定?
这里真是一个好地方!下次有问题一定跪求!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-5 19:42 , Processed in 0.294211 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表