楼主: huanglian969
5465 29

[问答] 求助!!第n个变量与前n-1个变量逐个相减,SAS筛选数据 [推广有奖]

11
huanglian969 发表于 2014-1-20 16:46:37
dengrong1989 发表于 2014-1-20 16:24
那这个变量太多了吧,需要再嵌套一个循环就可以的
是很多,如果是n个变量的话,比较完了以后最后应该出来的是n*(n-1)/2。虽然每次比较建立一个数组(i-1,i-2,i-m)也行,但是这样程序还是好长。不知您说的嵌套一个循环怎么写呢?

12
huanglian969 发表于 2014-1-20 16:55:22
梦想世界1 发表于 2014-1-20 16:45
举个小例子,你看下,数据集大的话你就改改参数吧。。。试下可行不
data raw;
  length p1 t1 p2 t2 p3 t ...
谢谢您的回复,不过我需要p4与前面每一个变量都相减来比较一下,这样的话可能就需要重复计算很多次,您那里有什么办法能解决吗?

13
梦想世界1 发表于 2014-1-20 17:08:24
huanglian969 发表于 2014-1-20 16:55
谢谢您的回复,不过我需要p4与前面每一个变量都相减来比较一下,这样的话可能就需要重复计算很多次,您那 ...
每个都比较了啊。。。你看看出来的结果不对吗

14
dengrong1989 发表于 2014-1-20 17:17:47
huanglian969 发表于 2014-1-20 16:46
是很多,如果是n个变量的话,比较完了以后最后应该出来的是n*(n-1)/2。虽然每次比较建立一个数组(i-1,i- ...
data raw;
  length p1 t1 p2 t2 p3 t3 p4 t4 8;
        input p1 t1 p2 t2 p3 t3 p4 t4;
cards;
1 2 4 4 8 6 7 8
2 1 6 6 7 11 12 15
3 2 7 2 11 6 15 12
11 16 13 15 16 20 16 24
;
run;
data a;
        array P(4);
        array t(4);
        array pp(4,4);
                array tt(4,4);
  set raw;
        do i=1 to 4;
           do j=1 to 4;
                      pp(i,j)=p(i)-p(j);
                          tt(i,j)=t(i)-t(j);
                   end;
        end;
        drop i j;
run;
这样算出来变量很多的

15
huanglian969 发表于 2014-1-20 18:43:46
梦想世界1 发表于 2014-1-20 17:08
每个都比较了啊。。。你看看出来的结果不对吗
嗯,是我太迟钝了,看出来了,这样没问题,非常感谢!

16
huanglian969 发表于 2014-1-20 18:46:27
dengrong1989 发表于 2014-1-20 17:17
data raw;
  length p1 t1 p2 t2 p3 t3 p4 t4 8;
        input p1 t1 p2 t2 p3 t3 p4 t4;
嗯,谢谢,您跟 @梦想世界1  在处理这个Loop的时候想到一块去了,真是英雄所见略同,谢谢!

17
huanglian969 发表于 2014-1-20 19:32:14
梦想世界1 发表于 2014-1-20 17:08
每个都比较了啊。。。你看看出来的结果不对吗
不好意思,我仔细看了下数据还是有点问题,您写的程序逻辑上没问题,但是出来的结果还是不太对;
以第一个观测为例 p1-p4 1 4 8 7  要求是差值大于3
                        t1-t4   2 4 6 8 要求是差值大于1
最后返回的结果是e=1,也就是只有一次比较满足了条件
但实际上应该有三次 【p3-p1 t3-t1】 【p3-p2 t3-t2】 【p4-p1 t4-t1】
此时e应该=3 c3=6 c4=8;
能不能麻烦您再看一下呢?

18
huanglian969 发表于 2014-1-20 19:33:55
dengrong1989 发表于 2014-1-20 17:17
data raw;
  length p1 t1 p2 t2 p3 t3 p4 t4 8;
        input p1 t1 p2 t2 p3 t3 p4 t4;
不好意思,再麻烦您一下,如果我要将算出来的差值跟某个特定的值比较,可以用数组吗?
而且是两个数组的比较,就是tt(i) 和pp(i) 同时满足某个范围的时候?

19
huanglian969 发表于 2014-1-20 19:50:06
dengrong1989 发表于 2014-1-20 17:17
data raw;
  length p1 t1 p2 t2 p3 t3 p4 t4 8;
        input p1 t1 p2 t2 p3 t3 p4 t4;
试了一下,是可以直接数组比较的,太好了

20
梦想世界1 发表于 2014-1-21 11:12:51
huanglian969 发表于 2014-1-20 19:32
不好意思,我仔细看了下数据还是有点问题,您写的程序逻辑上没问题,但是出来的结果还是不太对;
以第一 ...
1,其实你不用关注E这个变量,它只有标记作用,e后面为1是因为t4只满足了一个,t4产生的e把T3产生的值覆盖掉了,因为E只是标记作用,我没有用数组;
2,第一行只有6满足,8是不满足滴,因为P4不满足

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-31 23:47