假设我有两个表:A和B
表A:
aaa 79506333388
bbb 79502068252
ccc 79139859806
ddd 79113515443
eee 79231128300
fff 79194631152
表B:
79231128300
79194631152
如果表B中存在第二列中的值,我想修改A的第一列:
aaa 79506333388
bbb 79502068252
ccc 79139859806
ddd 79113515443
MODIFIED 79231128300
MODIFIED 79194631152
我预计,我可以实现类似:
data A;
set A;
if 2nd_col in B then 1st_col = 'MODIFIED';
run;
或使用proc sql:
proc sql;
create table A as
select *,
(case when 2nd_col in B then 1st_col = 'MODIFIED' else 1st_col) as 1st_col_1
from A;
delete 1st_col;
run;
但是他们中的其他人没有用。请不要尝试简化任务,我需要完全按照我的要求去做:修改其他表中的行。
答案 0 :(得分:1)
以下是在SAS中使用proc sql
的简单解决方案。
data A;
input A1 $ A2;
datalines;
aaa 79506333388
bbb 79502068252
ccc 79139859806
ddd 79113515443
eee 79231128300
fff 79194631152
;
run;
data B;
input B1;
datalines;
79231128300
79194631152
;
run;
proc sql;
update A
set A1 = 'MODIFIED'
where exists (select B1 from B where A.A2=B.B1);
quit;
答案 1 :(得分:0)
从您发布的问题开始,您的问题的解决方案如下所示。
DECLARE @TABLE1 TABLE(COLUMN1 VARCHAR(50), COLUMN2 VARCHAR(50))
INSERT INTO @TABLE1 VALUES('aaa','79506333388')
INSERT INTO @TABLE1 VALUES('bbb','79502068252')
INSERT INTO @TABLE1 VALUES('ccc','79139859806')
INSERT INTO @TABLE1 VALUES('ddd','79113515443')
INSERT INTO @TABLE1 VALUES('eee','79231128300')
INSERT INTO @TABLE1 VALUES('fff','79194631152')
DECLARE @TABLE2 TABLE(COLUMN1 VARCHAR(50))
INSERT INTO @TABLE2 VALUES('79231128300')
INSERT INTO @TABLE2 VALUES('79194631152')
UPDATE T1 SET COLUMN1='MODIFIED' FROM @TABLE1 T1 JOIN @TABLE2 T2 ON > T1.COLUMN2=T2.COLUMN1
SELECT * FROM @TABLE1
输出
------------------------
COLUMN1 | COLUMN2
------------------------
aaa | 79506333388
bbb | 79502068252
ccc | 79139859806
ddd | 79113515443
MODIFIED| 79231128300
MODIFIED| 79194631152
------------------------