1

伙计们,我真的很挣扎。

需要更新的表有 ~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)中是否有行,如果有,

我使用名为 W4TWGKJ6 的工作表更新 2 列(我需要更新 5,我只是从示例中删除它们)。

此更新需要永远。事实上,我每次都停止这个过程,因为它工作了几个小时而没有返回任何东西......

有谁知道这个问题的更好解决方案?

在此先感谢,加尔。

4

1 回答 1

2

我建议MODIFY在 datastep 中使用语句:您应该在两个表中为 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;

请参阅SAS:当“Modify”语句中的“where”条件不成立时,如何不覆盖数据集?完整参考iorc返回值。

于 2013-11-14T12:01:33.327 回答