作者MmmRrrrX (银色的灵魂)
站内Statistics
标题Re: [问题] 某几个栏位符合特定条件 该如何筛选
时间Wed Apr 7 05:01:39 2010
※ 引述《liton (欧吉桑留学生)》之铭言:
: 帮朋友想些SAS的程式该如何写
: 目前有个data set(source)
: 共6个栏位 (i,j,k,l,m,n 数字整数格式 已经由小到大排列)
: 想筛选出以下条件的资料
: (1).二个3连,
: 例, 2,3,4+11,12,13
: (2).三个2连,
: 例, 11,12+22,23+35,36
: (3).3单连+3偶连,
: 例, 3,5,7+12,14,16
: (4).2单连+2单连+2偶连或2单连+2偶连+2偶连的组合,
: 例, 3,5+11,13+30,32或2,4+10,12+33,35
: 我有想过用array写
: 但是array还是逃不出要指定哪些栏位符合条件
: 例如第一题中 我必须程式中有写到k-j, j-i
: 但是这样的解题方法到了第二题之後只会撞墙
: 不知道有啥比较好的解法呢?
(2)
data aa;
set aa;
a1=j-i; a2=k-j; a3=l-k; a4=m-l; a5=n-m;
if a1^=1 then a1=0;
if a2^=1 then a2=0;
if a3^=1 then a3=0;
if a4^=1 then a4=0;
if a5^=1 then a5=0;
data bb;
set aa;
if a1=1 and a2=0 and a3=1 and a4=0 and a5=1 then output;
keep i j k l m n;
run;
三个2连,所以a1-a5应该要 [1 0 1 0 1] 的样子才满足
(3)
data aa;
set aa;
b1=j-i; b2=k-j; b3=m-l; b4=n-m;
if b1^=2 then b1=0;
if b2^=2 then b2=0;
if b3^=2 then b3=0;
if b4^=2 then b4=0;
b5=k/2;
b6=ceil(b5);
if b5^=b6 then b7=1 ; else b7=0; *b7=1 k为奇数*;
b8=l/2;
b9=ceil(b8);
if b8=b9 then b10=1 ; else b10=0; *b10=1 l为偶数*;
data cc;
set aa;
if b1=2 and b2=2 and b3=2 and b4=2 and b7=1 and b10=1 then output;
keep i j k l m n;
run;
3单连+3偶连
所以b1-b4应该是 [2 2 2 2] 的样子才满足
另外要验证前三个是奇数 後三个是偶数
(只要三个里面有一个满足可以,不然b1-b4不会满足 [2 2 2 2] )
因为不知道SAS有没有直接看是不是奇数偶数的函数
所以小绕了一圈
(4)
data dd;
set aa;
a1=j-i; a2=k-j; a3=l-k; a4=n-m;
if a1^=2 then a1=0;
if a2^=2 then a2=0;
if a3^=2 then a3=0;
if a4^=2 then a4=0;
b1=j/2;
b2=ceil(b1);
if b1^=b2 then b3=1 ; else b3=0; *b3=1 j为奇数*;
b4=l/2;
b5=ceil(b4);
if b4^=b5 then b6=1 ; else b6=0; *b6=1 k为奇数*;
b7=n/2;
b8=ceil(b7);
if b7=b8 then b9=1 ; else b9=0; *b9=1 l为偶数*;
if a1=2 and a2=0 and a3=2 and a4=2 and b3=1 and b6=1 and b9=1 then output;
keep i j k l m n;
data ee;
set aa;
a1=j-i; a2=l-k; a3=m-l; a4=n-m;
if a1^=2 then a1=0;
if a2^=2 then a2=0;
if a3^=2 then a3=0;
if a4^=2 then a4=0;
b1=j/2;
b2=ceil(b1);
if b1^=b2 then b3=1 ; else b3=0; *b3=1 j为奇数*;
b4=l/2;
b5=ceil(b4);
if b4=b5 then b6=1 ; else b6=0; *b6=1 k为偶数*;
b7=n/2;
b8=ceil(b7);
if b7=b8 then b9=1 ; else b9=0; *b9=1 n为偶数*;
if a1=2 and a2=2 and a3=0 and a4=2 and b3=1 and b6=1 and b9=1 then output;
keep i j k l m n;
data ff;
set dd ee;
run;
2单连+2单连+2偶连 跟 2单连+2偶连+2偶连 分开做在合并
逻辑跟上面大同小异
没有data可以检查写的对不对,
也许有小错误在里面,或是没考虑周全的
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.119.145.80
※ 编辑: MmmRrrrX 来自: 140.119.145.80 (04/07 05:03)
※ 编辑: MmmRrrrX 来自: 140.119.145.80 (04/07 13:40)