2012-09-24 18 views
5

Yerel makinemde bir .sas dosyasında oluşturduğum bir makro var. Makroyu test etmek için kullanmakta olan bir yerel veri kümem var. Bu veri kümesi, uzak bir veri kümesiyle aynı tanımlayıcılara sahiptir, ancak yalnızca daha az gözlem vardır. Şimdi, yerel makroyu uzak veri kümesine karşı çalıştırmaya çalışıyorum. İşte ne temelde:RSUBMIT bloğunda yerel SAS makrosunu arayın?

Bu beklendiği gibi çalışır:

%include "C:\my_sas_macro.sas"; 

%my_sas_macro(my_data=work.localdata) 

ama sonra bu bir hata (hata takip) oluşturur:

125 %include "C:\my_sas_macro.sas"; 
136 
137 rsubmit; 
NOTE: Remote submit to REMOTEID.__7551 commencing. 
WARNING: Apparent invocation of macro MY_SAS_MACRO not resolved. 
83 %my_sas_macro(my_data=remotelib.remotedata) 
    - 
    180 
ERROR 180-322: Statement is not valid or it is used out of proper order. 
84 endrsubmit; 

NOTE: Remote submit to REMOTEID.__7551 complete. 
: hatasıyla

%include "C:\my_sas_macro.sas"; 

rsubmit; 
%my_sas_macro(my_data=remotelib.remotedata) 
endrsubmit; 

günlüğü

Eminim ki% makrosu /% ipucu bloğunu sunucuya aktarmam gerekiyor, ancak nasıl olduğunu. %SYSLPUT'u gördüm, ancak makro değişkenleri ve tam makrolar için değil.

kod üzerinde sadece SSH kalmadan sunucuda benim makro çalıştırmak ve orada %include o yine de var mı?

Teşekkürler!

Çözüm Uygulanan

[Düzenle] Bu yüzden şimdiye kadar benim için oldukça iyi çalışıyor ki şu makro ile geldi @ CarolinaJay65 'ın Yanıta göre.

%macro include_on_server(file=); 
%let server_file = ~/temp.sas; 
%SYSLPUT macro_file=&file; 
%SYSLPUT server_file = &server_file; 

rsubmit; 

proc upload 
    infile= "&macro_file." 
    outfile= "&server_file." 
; run; 

%include "&server_file."; 
endrsubmit; 

%mend include_on_server; 

Bu bana sadece %include_on_server(file="C:\my_file.sas") olabilmesinin önünü ve sonra şimdi benim uzak oturumda dahildir.

cevap

6

Nasıl hakkında Proc Upload

rsubmit; 
Proc Upload 
    infile='C:\my_sas_macro.sas' 
    outfile='//server/my_sas_macro.sas' ; 
run; 

%include '//server/my_sas_macro.sas'; 
%my_sas_macro(my_data=remotelib.remotedata) 

kullanarak veya bir makro değişkene bütün makro sonra sen CarolinaJay önerisi olan biri birkaç seçenek var

+0

Teşekkür:

rsubmit ; %MACRO MYMACRO ; /* do stuff */ %MEND ; %MACRO ANOTHERMACRO(PARAM) ; /* Do other things */ %PUT &PARAM ; %MEND ; endrsubmit ; 

Sonra SAS aşağıdaki çalıştırın 'Proc Upload; 'ibaresini kontrol edin, tamlığı için" makroyu bir makro değişkene atamak "için doğru yolu gösterebilecek misiniz? –

+0

Teşekkürler, bu benim için çalışıyor, ancak bir PITA türü çünkü sunucudaki dizin yapısını yönetmem gerekiyor (bu, otomatik olarak var olmayan dizinleri oluşturmaz). Sunucu tarafında dosyaları yönetmemi gerektirmeyen başka bir çözüm ortaya çıkmadığı sürece bunu yetkili cevap olarak tutacağım. –

+1

Endrsubmit'i ekleyebilirim; Sonunda her şeyin uzaktan yürütüldüğünü açıklamak için. – vasja

1

syslput% kullanmak atayabilir. Başka yerel olarak işleme yapıyor sakıncası yoksa, sunucu kitaplığında başvurmak için kütüphane-adı kullanabilirsiniz geçerli:

kütüphane-adı sunucusu = slibref =; öylesine libname myserver server = unix slibref = iş;

sunucu bağlantı komut 'unix' olarak adlandırılır ve onun çalışma dizinini istiyorum eğer.

PROC KATALOG ya ben de düşünüyorum PROC KOPYA, bir makro olarak veya sadece kaynak kodu olarak ister yukarıdaki gibi bir kod kopyalamak için libref bir sunucu ile birlikte kullanılabilir. Makrolar bir libref'ten diğerine (bu durumda bir makineden diğerine) kopyalanabilen bir katalogda (SASMACR) saklanır. Ayrıca, bir katalogda makroyu oluşturmak için kaynağı depolayabilir ve makroyu derlemek zorunda kalmamanızı engelleyebilirsiniz. Bu, katalogların, yerel makinenize karşı sunucuda çalıştırdığınız işletim sisteminin türüne bağlı olsa da, uyumlu olmasını gerektirir.

Son olarak, bu yazıda önerileri uygulayabilirsiniz: bile olmayan uyumlu makineler birlikte çalışmasını sağlamak için birlikte katalog çözüm ve PROC UPLOAD'a birleştiren http://www.nesug.org/proceedings/nesug05/io/io2.pdf .

+0

+1 Harika ayrıntılar için teşekkürler! Benim için Unfortunatley, donig yerel işleme, her biri yaklaşık 6GB olan 12 veri kümeleriyle çalışmam gerektiğinden bir seçenek değil. –

+0

PROC KATALOĞU çözümü iyi çalışıyor, sonra - önerinin sadece başlangıç ​​kısmı yerel işlem için (PDF'ye bakınız). – Joe

1

Makro tanımının etrafındaki, içerisine bir rsubmit/endrsubmit koyun. Yerel dosyayı eklediğinizde, makroyu uzaktan derler.

DÜZENLEME:

yani

c: \ remote_macro.sas aşağıda içerir: Ben olacak,

%inc "c:\remote_macro.sas" ; 

rsubmit ; 
    %MYMACRO ; 
    %ANOTHERMACRO(Hello World) ; 
endrsubmit ; 
+0

Bu işe yaramıyor = (rsubmit/endrsubmit bloğundaki kod, sunucu bağlamında yürütülüyor ve hata veriyor: "UYARI: Fiziksel dosya yok ..." ve sonra "HATA: % INCLUDE dosyası açılamıyor C: \ ... '. –

+0

Örnek kod ile düzenlemeye bakın. Rsubmit'i,% inc içinde makroda değil,% inc etrafında yerleştirdiğinizi düşünüyorum. –

+0

Teşekkürler! rsubmit; '/' endrsubmit; 'makro dosyanızdaki blokları yerel olarak ekleyemeyeceğiniz anlamına gelir, çünkü her zaman uzaktan gönderir. Dosya ekleyebilmem için bir çözüm aradım. hem yerel hem de uzaktan. –