2016-03-24 19 views
0

aşağıda: Ben yardımıyla makro çağırdığınızdaSAS makro ben yardım seçeneği ile bir makro oluşturmak çalışıyorum

%macro now(gg,datas); 

%if &gg=help %then %do 
%put; 
%put %str(hello); 
%goto exit; 
%end; 
proc print data=&datas; run; 
    %mend; 

Yani şu

yazdırılması gerektiğini

%now(help) 

Günlüğünde

, ancak bunun yerine hiçbir şey yapmaz. Bu kodda yanlış olan nedir?

+1

Konum parametrelerinin yerine anahtar kelime parametrelerini kullanmak için geçiş yapmayı düşünebilirsiniz. Yazıldığı gibi, yardım modunu çağırmadan makroyu çağırmak için, '% now (, sashelp.shoes) kodunu kodlamanız gerekir, gg parametresine boş değer vermek için başlangıçta virgülü not edin. Bu, hatırlamak için hızla sinir bozucu olur. Anahtar kelime parametreleriyle, '% ow (datas = sashelp.shoes) 'ile çağrı yapabilirsiniz. Aslında, konumsal parametrelerle tanımlanmış olsa bile, hala anahtar kelime parametreleriyle arayabilirsiniz. Ama anahtar kelime parametreleriyle tanımlamak daha iyi olur. – Quentin

cevap

2

%do'dan sonra noktalı virgül eksik ve %goto deyiminizdeki exit adında bir etikete başvurmadınız. Bu hatalar, makronun derlenmesini engeller; dolayısıyla, onu aramayı denediğinizde, SAS hiçbir şey yapmaz (bunları devre dışı bırakmadığınız sürece, günlükte bir uyarı mesajı oluşturma dışında).

şu beklendiği gibi çalışması gerekir:

%macro now(gg,datas); 

%if &gg=help %then %do; 
%put; 
%put %str(hello); 
%goto exit; 
%end; 
proc print data=&datas; run; 
%exit: 
    %mend; 

    %now(help) 

Doğrusu %goto daha bu tür bir şey için %return kullanarak öneririm - Eğer etiketlerini tanımlar ve hakkında çok fazla endişelenmenize gerek kalmadan işlevsellik aynı tür almak Makronuzun akışı.