2016-04-10 20 views
1

koşuluna bağlı olarak başka bir sas programını yürütmek için Aşağıdaki gibi bir error_table veri kümesine sahibim. Tüm değişkenler Ben Errorno001 ve 002 değilse bir sas programı yürüten bir mantık istediği karakterSAS koşullu mantığı

Errorno Error  Resolution 
001  login  check 
002  datacheck check 

bulunmaktadır. Else işlemini durdurun ve error_table'u görüntüleyin.

Ben bir hata atıyor aşağıdaki

%macro test(); 
    proc sql; 
     select trim(Error_No) into: num from error_table; 
    quit; 

    %if &num. not in ("001","002") %then %do; 
     %include "/path/dev/program.sas"; 
    %end; 
    %else %do; 
     proc print data = error_table; 
     run; 
    %end; 
%mend; 
%test; 

çalıştı Ama.

Mantığı düzeltebilir.

+0

Hangi hata atıyor? – Quentin

+1

Mantığınıza meraklı. Şunu mu demek istediniz: error_table içinde bir hata varsa, errorno in ("001" "002") içinde değil ise programı çalıştırın; else error_table yazdı mı? – Quentin

cevap

0

SELECT, sıfır satır döndürdüğünde durumun izlenmesi gerekir. NUM makro değişkenine varsayılan bir değer ayarlamanız gerekir.

Veri kümesi değişkeniniz sayısal mu yoksa karakter mi? TRIM() işlevinin yerine TRIMMED veya SEPARATED BY deyimini kullanarak INTO yan tümcesi tarafından oluşturulan makro değişkenindeki boşlukları engelleyin.

%let num=NONE; 
select Error_No into: num trimmed from error_table; 

makro işlemci her şeyi unutmayın

yüzden yapma ama değerler etrafında tırnak sen aslında değerin bir parçası olmadıkça maç için çalışıyoruz bir dizedir.
%if NOT (&num. in (001,002)) %then %do; 

Ayrıca size MINDELIMITER seçeneği ayarlamış emin olmanız gerekir makro kodu IN operatörünü kullanmak.

+0

Sanırım "MINOPERATOR" demek istediniz. Ayrıca 'in' operatörü gerektirmez (',') 've', '. – fl0r3k

0

proc sql hata kodları ile hareketli koşulu en uygun şekilde kullanırdım.

proc sql; 
    select count(*) into :num_errors 
    from error_table 
    where Errorno in ("001", "002"); 
quit; 

Sonra macrovariable size 001 veya 002 olan hataların sayısını var. Sonraki adım makro durumunu denetlemektir:

%if &num_errors. > 0 %then %do; 
    %include "/path/dev/program.sas"; 
%end; 
%else %do; 
    proc print data = error_table; 
    run; 
%end; 
%mend;