在SAS中同时使用proc sql插入和更新

时间:2017-07-28 11:24:04

标签: sas

我正在使用proc import

导入文件
create table work.login2
as select ' SURVEY_ID'n, TIME format=datetime20.,' USERNAME'n
from work.export_data
having TIME=max(TIME) and ' USERNAME'="sasdemo";
quit;

然后我从具有某些条件的出口表中选择了2个变量 proc SQL;

proc SQL;
select max(' SURVEY_ID'n) into: sid from work.login2;
quit;

然后我为survey_id创建了一个宏,因为我必须使用以下代码中显示的不同表格中的Survey_id引用更新一个值:

proc SQL;
case when ' SURVEY_ID'n is not null then update table_name set SAS_TRACKING_CODE="&Trackingcode."
where SURVEY_ID=&sid.
else end;
quit;

现在,如果ID为空,那么我不必插入任何内容,但如果我们有survey_id,我们会使用下面的代码在表格中更新几列,而不会发生。

start $folder

1 个答案:

答案 0 :(得分:0)

proc sql中的语法无效。完全没有。 case when只能在selectwhereorder by等州内使用。 如果SURVEY_ID不为空,则以下内容将进行更新:

proc sql;
  update table_name
  set SAS_TRACKING_CODE="&Trackingcode"
  where SURVEY_ID=&sid. and SURVEY_ID is not null
  ;
quit;

如果您想要的是在条件为真时执行update ,则应使用宏。

编辑:该宏看起来像这样:

%macro update;
  %if %symexist(sid) and not &sid = %then %do;
   proc sql;
      update table_name
      set SAS_TRACKING_CODE="&Trackingcode"
      where SURVEY_ID=&sid.
      ;
    quit;
  %end;
%mend;