楼主: huanglian969
5428 29

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

  • 0关注
  • 0粉丝

高中生

42%

还不是VIP/贵宾

-

威望
0
论坛币
1 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
211 点
帖子
29
精华
0
在线时间
27 小时
注册时间
2011-3-28
最后登录
2017-10-27

楼主
huanglian969 发表于 2014-1-16 18:35:31 |AI写论文
2论坛币
各位大神,求助,数据类型如下:
W1CSUGP37%7C]6~4Y}{K)6Q.jpg

以t4为例
1.需要筛查t4减t1大于1且p4-p1大于3,t4减t2大于1且p4-p2大于3,t4减t3大于1且p4-p3大于3的数据,出现符合条件的数据时,建立新的变量X=1,后面的数据以此类推;
2.当出现符合该条件的数据时,建立一个新的变量(例:t4减t1大于1且p4-p1大于3 时,,Y=t1),但是因为数据中,符合条件的情况会出现好几次,可能会有好几个Y。
怎样才能尽量少建立变量,也使得程序更简练。
之前用的是非常笨的方法,就是把每个变量的比较都写出来,倒是不会出错,但是看着那近千页的程序,觉得自己傻到家了,求坛子里的大神赐教。本人只有金币两枚,聊表谢意。
下面的那张图不知道是怎么跑出来的,( ̄▽ ̄")
问题还是木有解决,if a(i)-a(j)>3 and b(i)-b(j)>1 then e+1;最佳答案 @梦想世界1 的程序中这一句应该是让第N个变量跟前面所有的比,同时要求每个都满足,而不是任意一次比较满足就挑出来,怎么改都不对,还有哪位大神有更好的意见吗?




ZIA)UEX~EZ%8SBR$%5SWJP9.jpg (32.52 KB)

ZIA)UEX~EZ%8SBR$%5SWJP9.jpg

最佳答案

梦想世界1 查看完整内容

举个小例子,你看下,数据集大的话你就改改参数吧。。。试下可行不 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 a(4) p1-p4; array b(4) t1-t4; array c(3) c2-c4; set raw; do i=2 to 4; e=0; do j=1 to i-1; if a(i)-a(j)>3 and b(i)-b ...
关键词:筛选数据 Then 最佳答案 数据类型 大于1 程序

沙发
梦想世界1 发表于 2014-1-16 18:35:32
举个小例子,你看下,数据集大的话你就改改参数吧。。。试下可行不
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 a(4) p1-p4;
        array b(4) t1-t4;
        array c(3) c2-c4;
  set raw;

        do i=2 to 4;
          e=0;
          do j=1 to i-1;
                         if a(i)-a(j)>3 and b(i)-b(j)>1 then e+1;
                end;
                if e=i-1 then c(i-1)=b(i);
        end;
run;
已有 2 人评分经验 论坛币 学术水平 收起 理由
eijuhz + 20 精彩帖子
Imasasor + 100 + 100 + 4 分析的有道理

总评分: 经验 + 120  论坛币 + 100  学术水平 + 4   查看全部评分

藤椅
龙潭丰乐 学生认证  发表于 2014-1-16 19:09:17
写个宏吧

板凳
zhengbo8 发表于 2014-1-16 19:10:39
数据集或源数据,附件。
可能会有好几个Y。是指Y1、Y2、……;还是Y有多个观测值?

报纸
huanglian969 发表于 2014-1-17 08:06:46
龙潭丰乐 发表于 2014-1-16 19:09
写个宏吧
就是不会写宏,现在还在临时学。。。

地板
huanglian969 发表于 2014-1-17 08:09:25
zhengbo8 发表于 2014-1-16 19:10
数据集或源数据,附件。
可能会有好几个Y。是指Y1、Y2、……;还是Y有多个观测值?
因为一个记录多次比较之后,可能其中有几次是符合条件的,这个时候需要知道是哪几次的。所以我考虑建立新的变量,把每次符合条件的时候的tn的值记录下来。好像说绕了。。。

7
dengrong1989 发表于 2014-1-17 09:42:03
这个用两个数组就能搞定了
data b;
set a;
array a _numeric_;
array b;/*b数组个数要填一下*/
do i=dim(a) to 2 by -1;
b(i)=a(i)-a(i-1);
end;
run;
已有 2 人评分经验 论坛币 收起 理由
eijuhz + 40 精彩帖子
Imasasor + 100 精彩帖子

总评分: 经验 + 40  论坛币 + 100   查看全部评分

8
huanglian969 发表于 2014-1-17 10:14:36
dengrong1989 发表于 2014-1-17 09:42
这个用两个数组就没有搞定了
data b;
set a;
我先试一下,谢谢~

9
huanglian969 发表于 2014-1-20 15:35:10
dengrong1989 发表于 2014-1-17 09:42
这个用两个数组就没有搞定了
data b;
set a;
不好意思,我试了一下可是出来的只是第n个变量与前一变量相减,如果是希望与之前的每一个变量相减又该怎么办呢?

10
dengrong1989 发表于 2014-1-20 16:24:33
huanglian969 发表于 2014-1-20 15:35
不好意思,我试了一下可是出来的只是第n个变量与前一变量相减,如果是希望与之前的每一个变量相减又该怎么 ...
那这个变量太多了吧,需要再嵌套一个循环就可以的

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

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