使用SAS SQL

时间:2017-12-13 05:37:27

标签: sas proc-sql

需要更新主文件中的列,例如Column1A& B值。

我有一组不同的文件(映射文件),它有2个不同的列Column1只有A个值& Column2只有B个值,这些值具有唯一值。

我的要求是仅将A值替换为B,并且显示的B值必须与主文件中的列保持相同。

请帮我在SAS SQL中编写更新语句。

我试过了,

PROC SQL;
UPDATE MASTERTABLE K
SET COLUMN1 = (SELECT L.COLUMN2 FROM MAPPINGFILE L WHERE K.COLUMN1= L.COLUMN1);
QUIT;

1 个答案:

答案 0 :(得分:0)

听起来您希望最小化跟踪主表预映射值以及执行映射操作。如果不是这种情况,请使用更多详细信息和示例数据编辑问题。

SQL exists运算符将允许您指定为更新选择仅需要映射操作的行的条件。

data have_master;
  do row = 1 to 100;
    current_value = byte(65 + mod(row,26));
    prior_value = ' ';
    output;
  end;
run;

data have_map;
  length from_value to_value $1;
  input from_value to_value;
datalines;
A a
B d
Z K
run;


proc sql;
  update have_master
  set 
    prior_value = current_value
  , current_value = (select to_value from have_map where have_map.from_value = have_master.current_value)
  where
     exists (select * from have_map where have_map.from_value = have_master.current_value)
;

%let syslast=have_master;

我说最低限度跟踪,因为后续使用查询可以覆盖先前分配的prior_value