susanyue
合并几个数据集后,发现同样的id因为有些变量的值不同而有多条记录,
例如:
data a;
input id x1 x2 @@;
cards;
1 11 12
2 21 22
4 41 42
4 411 422
5 51 52
;
data b; input id x3 @@;
cards;
1 13 3 33 4 43 5 53 5 533 5 5333
;
run;
data c;
merge a b;
by id;
proc print;
run;
得到结果如下:
obs id x1 x2 x3
1 1 11 12 13
2 2 21 22 .
3 3 . . 33
4 4 41 42 43
5 4 411 422 43
6 5 51 52 53
7 5 51 52 533
8 5 51 52 5333
怎样用SAS程序把上面红色部分的找出来,并且按照id号记录,因为数据库中变量有800个,也就是说要相同id号的记录,用proc compare进行每个变量比较的话,要比较800次,想问有没有高手可以写一个程序帮忙把同一记录号变量值不同的变量找出来呢?
susanyue
没人回答我哦?
jessicamin
最后要找的是变量 比如 id=5 differ_var=x3
还是要把这样的记录找出来 比如id=5 保留三条记录 id=1没有记录
我是一个好人
first.variable
用这个?
jingju11
%macro FindDifVmcr;
proc contents data=c;
ods output variables=vs(where=(upcase(variable)^='ID'));
run;
proc format;
value $vFmt
' '=' '
other='D'
;
run;
proc sql noprint;
select variable into :Vs separated by ' ' from vs;
create table vvv as select distinct id from c;
%let i=1;
%do%while(%scan(&Vs,&i)^=%str( ));
%let v=%scan(&Vs,&i);
create table vvv_ as
select distinct id,"&v" as _&v._ format=$vFmt.
from
(select id, &v, (mean(&v)=&v) as x_ from c group by id) as aa
where aa.x_=0
order by id;
create table vvv as
select *
from vvv as v left join vvv_
on v.id=vvv_.id;
%let i=%eval(&i+1);
%end;
quit;
%mend FindDifVmcr;
%FindDifVmcr
;
proc print;run;
xjuchenwei
楼上。%是不是应该为 /* 呀。
jingju11
为什么?
你无法运行以上的代码?
xjuchenwei
这是日志的内容,就是不能运行呀
NOTE: Copyright (c) 1999-2000 by SAS Institute Inc., Cary, NC, USA.
NOTE: SAS (r) Proprietary Software Release 8.1 (TS1M0)
Licensed to UNIVERSITY OF CALIFORNIA/BERKELEY CAMPUS, Site 0029107011.
NOTE: This session is executing on the WIN_PRO platform.
NOTE: SAS initialization used:
real time 2.09 seconds
cpu time 0.85 seconds
1 %macro FindDifVmcr;
2
3 proc contents data=c;
4 ods output variables=vs(where=(upcase(variable)^='ID'));
5 run;
6
7 proc format;
8 value $vFmt
9 ' '=' '
10 other='D'
11 ;
12 run;
13 proc sql noprint;
14 select variable into :Vs separated by ' ' from vs;
15 create table vvv as select distinct id from c;
16 %let i=1;
17 %do%while(%scan(&Vs,&i)^=%str( ));
18 %let v=%scan(&Vs,&i);
19 create table vvv_ as
20 select distinct id,"&v" as _&v._ format=$vFmt.
21 from
22 (select id, &v, (mean(&v)=&v) as x_ from c group by id) as aa
23 where aa.x_=0
24 order by id;
25 create table vvv as
26 select *
27 from vvv as v left join vvv_
28 on v.id=vvv_.id;
29 %let i=%eval(&i+1);
30 %end;
31 quit;
32 %mend FindDifVmcr;
33
34 %FindDifVmcr
ERROR: File WORK.C.DATA does not exist.
NOTE: Statements not processed because of errors noted above.
NOTE: PROCEDURE CONTENTS used:
real time 0.64 seconds
cpu time 0.00 seconds
NOTE: The SAS System stopped processing this step because of errors.
WARNING: Output 'variables' was not created.
NOTE: Format $VFMT has been output.
NOTE: PROCEDURE FORMAT used:
real time 0.07 seconds
cpu time 0.00 seconds
ERROR: File WORK.VS.DATA does not exist.
ERROR: File WORK.C.DATA does not exist.
WARNING: Apparent symbolic reference VS not resolved.
WARNING: Apparent symbolic reference VS not resolved.
ERROR: File WORK.C.DATA does not exist.
ERROR: File WORK.VVV.DATA does not exist.
ERROR: File WORK.VVV_.DATA does not exist.
WARNING: Apparent symbolic reference VS not resolved.
NOTE: The SAS System stopped processing this step because of errors.
NOTE: PROCEDURE SQL used:
real time 0.75 seconds
cpu time 0.03 seconds
35 ;
36
37 proc print;run;
ERROR: There is not a default input data set (_LAST_ is _NULL_).
NOTE: The SAS System stopped processing this step because of errors.
NOTE: PROCEDURE PRINT used:
real time 0.01 seconds
cpu time 0.01 seconds
这是输出结果,对吗
The SAS System 21:43 Sunday, August 11, 2009 3
Obs id
1 1
2 2
3 3
4 4
5 5
xjuchenwei
这个才是结果,看看对不对。不好意思,前面说错了
The SAS System 21:43 Sunday, August 11, 2009 1
Obs id x1 x2 x3
1 1 11 12 13
2 2 21 22 .
3 3 . . 33
4 4 41 42 43
5 4 411 422 43
6 5 51 52 53
7 5 51 52 533
8 5 51 52 5333
The SAS System 21:43 Sunday, August 11, 2009 2
The CONTENTS Procedure
Data Set Name: WORK.C Observations: 8
Member Type: DATA Variables: 4
Engine: V8 Indexes: 0
Created: 21:49 Sunday, July 11, 1993 Observation Length: 32
Last Modified: 21:49 Sunday, July 11, 1993 Deleted Observations: 0
Protection: Compressed: NO
Data Set Type: Sorted: NO
Label:
-----Engine/Host Dependent Information-----
Data Set Page Size: 4096
Number of Data Set Pages: 1
First Data Page: 1
Max Obs per Page: 126
Obs in First Data Page: 8
Number of Data Set Repairs: 0
File Name: C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\SAS
Temporary Files\_TD3984\c.sas7bdat
Release Created: 8.0101M0
Host Created: WIN_PRO
-----Alphabetic List of Variables and Attributes-----
# Variable Type Len Pos
儍儍儍儍儍儍儍儍儍儍儍儍儍儍儍儍儍?
1 id Num 8 0
2 x1 Num 8 8
3 x2 Num 8 16
4 x3 Num 8 24
The SAS System 21:43 Sunday, August 11, 2009 3
Obs id
1 1
2 2
3 3
4 4
5 5
jingju11
就这些?我也没有看到错误啊。贴全部啊