R******d 发帖数: 1436 | 1 某个数据集有很多变量,其中一个叫id。第二个数据集就一个id变量,而且是前一个数
据集id变量的子集。
我的问题是:能否用proc sql在第一个数据集里产生一个新的变量,如果第二个数据集
中的id变量包含于第一个数据集中的id变量中,则标记为1,否则标记为0。
谢谢。 |
a*z 发帖数: 294 | 2 use SAS proc sql case when.
Follow is my code. It works under SAS 9.4.
data A;
input id $ x y;
datalines;
01 3 4
02 4 5
03 5 6
04 6 7
;
run;
proc print; run;
data B;
input id $;
datalines;
02
04
06
;
run;
proc print; run;
proc sql;
create table want as
select A.*, case when id in (select id from B) then 1 else 0 end as idx
from A;
quit;
proc print; run;
Result:
Obs id x y idx
1 01 3 4 0
2 02 4 5 1
3 03 5 6 0
4 04 6 7 1
Try it out to see if this is what you want. |
s*****e 发帖数: 422 | 3 这个可以吗?
proc sql;
select id, (case when dataset1.id=dataset2.id2 then 1 else 0 end) as dummy
from dataset1,dataset2(rename=(id=id2))
quit;
【在 R******d 的大作中提到】 : 某个数据集有很多变量,其中一个叫id。第二个数据集就一个id变量,而且是前一个数 : 据集id变量的子集。 : 我的问题是:能否用proc sql在第一个数据集里产生一个新的变量,如果第二个数据集 : 中的id变量包含于第一个数据集中的id变量中,则标记为1,否则标记为0。 : 谢谢。
|
R******d 发帖数: 1436 | 4 好用,谢谢了。
【在 a*z 的大作中提到】 : use SAS proc sql case when. : Follow is my code. It works under SAS 9.4. : data A; : input id $ x y; : datalines; : 01 3 4 : 02 4 5 : 03 5 6 : 04 6 7 : ;
|
s*********a 发帖数: 2623 | 5 同一个例子的话,在data step里应该也可以做把
dataset A 多给一个variable 叫yes好了。设为0,
然后 dataset B里面也多给一个variable也叫yes,设为1,
然后用data c; update A B ; by id; run;
【在 a*z 的大作中提到】 : use SAS proc sql case when. : Follow is my code. It works under SAS 9.4. : data A; : input id $ x y; : datalines; : 01 3 4 : 02 4 5 : 03 5 6 : 04 6 7 : ;
|
p******p 发帖数: 13 | 6 亲测可用,想覆盖data1的话把最后的new_data1改成data1就好,虽然覆盖源dataset习
惯很不好。
data data1;
input id t1 t2;
datalines;
1 2 3
2 4 5
3 4 5
;
run;
data data2;
input id;
datalines;
1
2
;
run;
proc sql noprint;
create table new_data1 as
select data1.*,coalesce(flag,0) as flag from
data1 left join (select data2.*,1 as flag from data2)
on data1.id=data2.id
;
quit; |