2016-07-20 29 views
1

私は、APIを呼び出して答えを得るためのSASマクロを呼び出す関数を持っています。この関数は、ステップデータから呼び出され、パラメータを渡します。SASのユーザー定義関数から戻り値を取得する

datastepで応答値を取得できないことを除いて、プロセス全体が正常に動作します。

マクロを別々に実行すると、APIレスポンスをログに書き込むことができるため、データストアに戻ることができるはずです。

アイデア?ここ

コード

マクロ

%macro acortador(); 
%put &url_larga; 

data _null_; 
length url $ 2048; 
url = catt(
'http:XXXXXX',urlencode(trimn(&url_larga))); 
call symputx('REQUEST_URL', url); 
run; 

%put &REQUEST_URL; 

/* API request */ 
filename out "XXXXXXXX.xml"; 

proc http 
    out=out   
    url= "%superq(REQUEST_URL)" 
    method="get"; 
run; 

/* response xml */ 
filename data 'XXXXXXX.xml'; 

data _null_; 
    infile data lrecl = 32000 truncover scanover; 
     input      
      @"<status>" shorturl $255. @@; 
     shorturl = substr(shorturl,1,index(shorturl,'</')-1); 
     call symputx('r', shorturl); 
run; 

%put &r; 

%mend acortador; 

機能

proc fcmp outlib=work.funcs.test; 
function acortador(url_larga $) $ 300; 
rc = run_macro('acortador', url_larga, r); 
    return (r); 
endsub; 
quit; 

options cmplib=work.funcs; 

Datastepある

data test; 
    set work.origin_table; 
    r = acortador(some_parameter); 
run; 
+0

'run_macro'とは何ですか?それは別の機能ですか? –

+0

マクロを呼び出す必要がありますか? [Support.sas](http://support.sas.com/documentation/cdl/en/proc/65145/HTML/default/viewer.htm#n19ylmyrvhp7y6n1889zmwsv9nuh.htm) – Bigandrew

+0

ありがとう、私はこの呼び出し関数を前に見たことがありません。 –

答えて

1

問題は、RUN_MACROで使用される戻り変数rが原因です。あなたは長さを指定していません。デフォルトでは、SASはそれが数字であると想定しています。 (数値がない)。あなたがしようとすると、あなたはマクロ定義を生成するように言ってみましょう%rは= 1;現在のコードで戻り値1を取得します。しかし、修正されたレスポンス文字列を取得することを検討しているためです。文字の値を取得するには、最初の使用前にrの長さを追加するだけです。

length r $ 32767; 
rc = run_macro('acortador', url_larga, r); 

これが役立ちます。

+0

ありがとうございました!その作品は元気です! – Bigandrew

関連する問題