SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1943|回复: 11
打印 上一主题 下一主题

请教这组数据如何编程呢^^

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2010-6-16 22:54:35 | 只看该作者

请教这组数据如何编程呢^^

例如数据是这样:
编号    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:( -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2010-6-17 09:25:39 | 只看该作者

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2010-6-17 16:46:51 | 只看该作者

Re: 请教这组数据如何编程呢^^

太谢谢你了!!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2010-6-17 20:22:23 | 只看该作者

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2010-6-17 21:02: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,为下一组的计数做准备
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2010-6-17 21:32:19 | 只看该作者

Re: 请教这组数据如何编程呢^^

我现在最不明白的就是p值怎么得到的,

程序里p=ifn(i,temp-1,.),是当i为真时,把temp-1赋给了p? 而此时i值在1,2.3处均为0,也就是0-1=-1??
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2010-6-18 08:39:29 | 只看该作者

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2010-6-21 16:56:33 | 只看该作者

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
但我不知道怎么用怎么两个不同行的值呢
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2010-6-21 19:49:37 | 只看该作者

Re: 请教这组数据如何编程呢^^

没看懂 <!-- s:( --><img src="{SMILIES_PATH}/icon_sad.gif" alt=":(" title="Sad" /><!-- s:( -->
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
10#
 楼主| 发表于 2010-6-21 20:34:27 | 只看该作者

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]
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-4 03:31 , Processed in 0.069342 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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