SAS中文论坛

标题: 请教这组数据如何编程呢^^ [打印本页]

作者: shiyiming    时间: 2010-6-16 22:54
标题: 请教这组数据如何编程呢^^
例如数据是这样:
编号    i     q
1  
2      
3        1      2
4
5  
6        2     2
7  
8  
9        3     2
...
我想做出q值,它分别表示在1之前数据的个数,1和2之间的个数,2和3之间的个数。。等等。。
如此类的程序,应该怎么做呢。非常感谢!
或者简单点,知道某个数的位置也行,。。就是变量i里1的位置是3,2的位置是6,这样相减也可以得出q值了。。
可是找了半天也不知道位置函数是什么。。 <!-- s:( --><img src="{SMILIES_PATH}/icon_sad.gif" alt=":(" title="Sad" /><!-- s:( -->
作者: shiyiming    时间: 2010-6-17 09:25
标题: Re: 请教这组数据如何编程呢^^
[code:25tvfw1g]data temp(drop=temp);
        input id 1&#46; +1 i 1&#46;;
        temp+1;
        p=ifn(i,temp-1,&#46;);
        temp=ifn(i,0,temp);
datalines;
1
2
3 1
4
5
6
7 2
8
9 3
;[/code:25tvfw1g]
作者: shiyiming    时间: 2010-6-17 16:46
标题: Re: 请教这组数据如何编程呢^^
太谢谢你了!!
作者: shiyiming    时间: 2010-6-17 20:22
标题: Re: 请教这组数据如何编程呢^^
[color=#BF4080:1cvzxil7]版主真是太厉害了°°数据已经处理好了,
但是也许是我基础或者指针这些没学好,还是有点不太明白,
如果把temp也写出来,如下,怎么p值会是temp-1得到的呢?? 恳请版主再帮我指点一下 <!-- s:idea: --><img src="{SMILIES_PATH}/icon_idea.gif" alt=":idea:" title="Idea" /><!-- s:idea: -->  
id      i      temp       p
1************1*****       
2***********2*****       
3*****1*****0*****2
4***********1*****
5***********2*****
6***********3*****
7*****2*****0*****3
8***********1*****
9*****3*****0***** 1              
sorry,我这数据不知道怎么贴图 <!-- s:oops: --><img src="{SMILIES_PATH}/icon_redface.gif" alt=":oops:" title="Embarassed" /><!-- s:oops: --> ,    [/color:1cvzxil7]
作者: shiyiming    时间: 2010-6-17 21:02
标题: Re: 请教这组数据如何编程呢^^
[code:334fngkz]proc import out=work&#46;temp datafile='C&#58;\Book1&#46;xls' dbms=excel replace;
        range='sheet1$';
        getnames=yes;
run;
data temp(drop=temp);
        set temp;
        temp+1;
        p=ifn(i,temp-1,&#46;);
        temp=ifn(i,0,temp);
run;[/code:334fngkz]
temp是计数变量,在每组的结束temp的值会赋给p,然后temp的值会置为0,为下一组的计数做准备
作者: shiyiming    时间: 2010-6-17 21:32
标题: Re: 请教这组数据如何编程呢^^
我现在最不明白的就是p值怎么得到的,

程序里p=ifn(i,temp-1,.),是当i为真时,把temp-1赋给了p? 而此时i值在1,2.3处均为0,也就是0-1=-1??
作者: shiyiming    时间: 2010-6-18 08:39
标题: Re: 请教这组数据如何编程呢^^
p的值是temp计算出的,用IF语句替换IFN()后如下
[code:27gbur5p]data temp;
        input id 1&#46; +1 i 1&#46;;
        temp+1;
        if not missing(i) then
                do;
                        p=temp-1;
                        temp=0;
                end;
datalines;
1
2
3 1
4
5
6
7 2
8
9 3
;[/code:27gbur5p]
作者: shiyiming    时间: 2010-6-21 16:56
标题: Re: 请教这组数据如何编程呢^^
版主,接着这组数又有个问题,
data a;
input id x i ;
cards;
1 900 .
2 800 .  
3 750  1 .
4 600 .  
5 650 .  
6 500 .  
7 300 2 .
8 300 3 .
9 300 4 .
9 200 .  
10 150 5 .
11 140 6 .
;
run;
data final;
set a; drop x1 q;
retain rt qq  0;
rt+1;
if i ne . then x1=lag(x);
if i ne . then do q=rt-1;rt=0;end;
if x ne x1 then qq=q;
qq1=qq/3;    /*rt,qq,qq1的数值都已经算好了*/
run;

我想生成一个新变量qq2,利用到rt ,qq和qq1 列里的数,qq2=rt/qq+qq1,对应于缺省的位置也就是:
1/2+0.667  
2/2+0.667  
1/3+1
2/3+1
3/3+1
1/1+0.333
但我不知道怎么用怎么两个不同行的值呢
作者: shiyiming    时间: 2010-6-21 19:49
标题: Re: 请教这组数据如何编程呢^^
没看懂 <!-- s:( --><img src="{SMILIES_PATH}/icon_sad.gif" alt=":(" title="Sad" /><!-- s:( -->
作者: shiyiming    时间: 2010-6-21 20:34
标题: Re: 请教这组数据如何编程呢^^
[color=#FF8000:302p5s4p]嘻嘻 版主在!
我再说详细点,你可以把我写的程序运算一下,然后生成的final 里面看到rt,qq,和qq1的值,我想
再生成一个新变量qq2,利用到rt ,qq和qq1 列里的数,使得qq2=rt(i)/qq(i+1)+qq1(i+1),rt除以它下个qq,然后只算rt不等于0的位置,对应的值也就是:
1/2+0.667
2/2+0.667
1/3+1
2/3+1
3/3+1
1/1+0.333[/color:302p5s4p]
作者: shiyiming    时间: 2010-6-22 10:04
标题: Re: 请教这组数据如何编程呢^^
实在不理解你的应用,下述代码仅基于示例数据
[code:37an1eg5]data a;
        input id x i ;
cards;
1 900 &#46;
2 800 &#46;
3 750 1 &#46;
4 600 &#46;
5 650 &#46;
6 500 &#46;
7 300 2 &#46;
8 300 3 &#46;
9 300 4 &#46;
9 200 &#46;
10 150 5 &#46;
11 140 6 &#46;
;
data temp(drop=temp);
        set a;
        group=temp;
        temp+ifn(missing(i),0,1);
run;
data temp(drop=group q);
        do _n_=1 by 1 until(last&#46;group);
                set temp;
                by group;
        end;
        q=_n_-1;
        do _n_=1 to _n_;
                set temp;
                if missing(i) then qq2=_n_/q+q/3;
                        else call missing(qq2);
                output;
        end;
run;[/code:37an1eg5]
作者: shiyiming    时间: 2010-6-22 16:52
标题: Re: 请教这组数据如何编程呢^^
[color=#FF8080:uiugmd64]斑斑啊,这组数里最后的q2是对了,能不能再教我如何把qq1里的数加进去,而不是直接除3得到,因为在实际数据里,qq1也是用我写的那个程序算出来的,。。
很麻烦是把,哎。 <!-- s:-| --><img src="{SMILIES_PATH}/icon_neutral.gif" alt=":-|" title="Neutral" /><!-- s:-| -->
另外这种算法是Helse/Cohn方法,用于计算多个检测线下数据的,如果斑斑有兴趣,我可以给你详细介绍。 <!-- s:mrgreen: --><img src="{SMILIES_PATH}/icon_mrgreen.gif" alt=":mrgreen:" title="Mr. Green" /><!-- s:mrgreen: --> [/color:uiugmd64]




欢迎光临 SAS中文论坛 (https://mysas.net/forum/) Powered by Discuz! X3.2