楼主: basswawa
3886 18

请教位置函数 [推广有奖]

11
basswawa 发表于 2010-6-18 21:27:45
好的  不知道怎么说感谢 书已经买啦

12
basswawa 发表于 2010-6-19 06:29:28
版主,就这个数据我其实还有个问题。。今天又琢磨一天,不知道哪里错了。。
我又加了一组数,主要是这个按照数来判断的,
如图中画的,如果出现相同的数,则q值应该跟前一个一样。。但是结果就是出不来呢。
未命名.bmp
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;
retain rt 0;
rt+1;
if i ne . then do q=rt-1;rt=0;end;
drop rt;  /*用你之前写的,求q值的*/
if i ne . then do;
if x=lag(x)  /*把x与x的前一个数值比较*/
then q=lag(q);end;  /*如果相等,q等于上一个q值,并循环倒下一个*/
run;

觉得求的这个q值还是有点复杂,其实就是如果左边的数相等,右边的数就应该相等。

13
nkwilling 发表于 2010-6-19 08:10:52
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;
retain rt qq 0;
rt+1;
ii=lag(i);
if i ne . then do q=rt-1;rt=0;end;
if i ne . then if ii eq . then qq=q;
if i eq . then qq=.;
keep id x i qq;
run;

14
basswawa 发表于 2010-6-19 16:58:23
多谢!
只是变量x的最后两个数字不一样,q值还得是1和0。
这个程序都变成1了。

15
basswawa 发表于 2010-6-19 17:28:06
我做出来了!
终于有点明白retain的含义了,不满足条件时保留上一个值是把。。
data final;
set a;
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;
run;

16
郑小知 发表于 2010-6-20 14:05:06
版主好强大啊!!!

17
郑小知 发表于 2010-6-20 22:53:28
15# basswawa
retain函数可以保留循环步的上一步的数值,如果是第一步的话,就是赋初始值。灵活运用retain函数,可以在DATA步生成一些滞后数列。详情参考SAS帮助文档retain函数。

18
basswawa 发表于 2010-6-20 23:50:12
又碰上问题不会了,还是这组数,
现在我想生成一个新变量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
但我不知道怎么用怎么两个不同行的值呢


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;

19
basswawa 发表于 2010-6-21 16:53:22
今天好热闹阿

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-29 17:45