如何将数据集Count分配给变量并在IF ELSE语句中使用它

时间:2018-02-19 07:47:04

标签: sas

我想将数据集的数量存储在变量中,如下所示

%let Cnt ;



create table work.delaycheck as
select * from connection to oracle
(

SELECT PTNR_ID,CLNT_ID,REPORTING_DATE_KEY,NET_SALES
FROM FACT_TABLE
MINUS
SELECT PTNR_ID,CLNT_ID,REPORTING_DATE_KEY,NET_SALES
FROM HIST_FCT


);

我想将此表的计数存储在变量Cnt中,如下所示

%put = (Select count(*) from work.delaycheck )

然后

If(Cnt=0)

THEN

     DO NOTHING

ELSE

    execute(

                 Insert into Oracle_table

                  select * from work.delaycheck 



) by oracle;

disconnect from oracle;

quit;

我怎样才能实现这些步骤?在此先感谢!!

2 个答案:

答案 0 :(得分:1)

  1. 从代码中删除此行

    %let Cnt ;

  2. 为了得到计数:添加下面的代码将创建带有计数的宏变量Cnt:

    proc sql; Select count(*) into: Cnt from work.delaycheck ; quit;

  3. 更新if语句:“&”用于引用宏变量

    If &cnt=0

  4. 下面的代码显示了如何使用if / else和使用Call Execute:

    data _null_;
    if &cnt=0 then put 'Cnt is 0';/*if true: a note is written to the log*/
    else call execute ('proc print data=work.e; run;'); 
    /*else clause: the Proc Print code is executed*/
    run;
    

答案 1 :(得分:1)

显示的所有SQL和数据都是远程进行的。您可以在不涉及SAS的情况下执行所有活动。 Oracle将处理

$(function() {
  afficheConversation();

  $('form').on('submit', function(e) {
    e.preventDefault();

    $.post('/../chat.php', { 
      'message': $('#message').val(),
      'pseudo':  $('#pseudo').val()
    }, function () {
      console.log('message sent: ' + message);
      $('#message').val('');
      afficheConversation();
    });
  });
});

如果事实表仅包含历史事实,则不插入任何记录。

PROC SQL; CONNECT TO ORACLE ...; EXECUTE ( INSERT INTO <TARGET_TABLE> SELECT * FROM ( SELECT PTNR_ID,CLNT_ID,REPORTING_DATE_KEY,NET_SALES FROM FACT_TABLE MINUS SELECT PTNR_ID,CLNT_ID,REPORTING_DATE_KEY,NET_SALES FROM HIST_FCT ) ) BY ORACLE; 也可以提交PL / SQL语句,从而减少对无关系统相互作用的需求。