我真的很挣钱。
表需要更新有~15M行和~200列。
我需要使用工作表表更新几列。
这是(部分)我需要做的事情:
%macro condition;
%if &row_count>0 %then %do;
data _null_;
set W4TWGKJ6 end=final;
if _n_ = 1 then call execute("proc sql ;");
call execute
("update dds.insurance_policy set X_STORNO_BY_VERSION="||TOSNUM||" where policy_no='"||cats(polid)||"' and X_INSURANCE_PRODUCT_CD='"||cats(prodid)||"'
and X_INSURER_SERIAL_NO = "||X_INSURER_SERIAL_NO||" and x_source_system_cd ="||'"5"'||" and x_source_system_category_cd ="||'"5"'||" and x_current_ind = "||'"Y"'||";,
update dds.insurance_policy set STATUS_CHANGE_DT="||ISSUE_DT||" where policy_no='"||cats(polid)||"' and X_INSURANCE_PRODUCT_CD='"||cats(prodid)||"'
and X_INSURER_SERIAL_NO = "||X_INSURER_SERIAL_NO||" and x_source_system_cd ="||'"5"'||" and x_source_system_category_cd ="||'"5"'||" and x_current_ind = "||'"Y"'||";");
if final then call execute('quit;'); run;
%end;
%mend;
%condition;
我先检查表格中是否有行(& row_count) 如果有,
我更新了2列(我需要更新5,我只是从示例中删除它们) 使用名为W4TWGKJ6的工作表。
此更新需要永久。 事实上,我每次都停止了这个过程,因为它工作了几个小时而没有返回任何东西....
有没有人知道这个问题的更好解决方案?
提前致谢, 加仑
答案 0 :(得分:2)
我建议在datastep中使用MODIFY
语句:
对于BY变量,两个表中应该具有相同的列名,并按这些变量进行排序。
data dds.insurance_policy;
modify
dds.insurance_policy
W4TWGKJ6 (keep= POLICY_NO X_INSURER_SERIAL_NO /* key variables */
X_STORNO_BY_VERSION STATUS_CHANGE_DT /* ... other variables from source to update target */
updatemode=nomissingcheck;
by POLICY_NO X_INSURER_SERIAL_NO;
if _iorc_ = %sysrc(_SOK) then do;
* Update row ;
replace;
end;
else _error_ = 0;
run;
有关 iorc 返回值的完整参考,请参阅SAS: How not to overwrite a dataset when the "where" condition in a "Modify" statement does not hold?。