2017-09-26 42 views
2

長時間讀者首次提問者。SAS數據整合工作室

使用SAS Data Integration studio,當您在表選項高級選項卡中創建彙總轉換時,您可以自動將代碼添加到代碼中。不幸的是,它增加了一些代碼,導致錯誤的解決方案。把在那裏文本框中輸入以下內容:

TESTFIELD = "TESTVALUE" 

創建

%let _INPUT_options = %nrquote(WHERE = %(TESTFIELD = %"TESTVALUE%"%)); 

在代碼中,使用

proc tabulate data = &_INPUT (&_INPUT_options) 

但解析

WHERE = (TESTFIELD = "TESTVALUE") 

       _ 
       22 

ERROR: Syntax error while parsing WHERE clause. ERROR 22-322: Syntax error, expecting one of the following: a name, a quoted string, a numeric constant, a datetime constant, a missing value, (, *, +, -, :, INPUT, NOT, PUT, ^, ~.

我的問題是這樣的:有沒有一種方法來添加一個函數的where語句框,這將允許在這裏正確添加引號?

請注意,所有函數自動添加到where語句時會獲得前面的%,並且我無法控制該語句。這似乎是應該相對容易解決的事情,但我還沒有找到一個簡單的方法。

+0

您是否生成PROC TABULATE代碼?或者那也是由工具產生的?那就是你可以在%UNQUOTE()中添加刪除在%LET語句中添加的宏引用嗎? – Tom

+0

不幸的是,它是自動生成的。我可以調整的唯一部分是where語句的文本框。其他一切都是由此產生的。 – Cliff

+0

在這種情況下,請提供SAS支持憑單。也許有一些選項可以防止DIS添加宏引用。 – Tom

回答

0

%只是逃避"()字符;他們完全無害,真的。更大的問題是%NRQUOTE「報價」(這是非打印字符,告訴SAS這是宏觀引用);他們搞砸了WHERE處理。

使用%UNQUOTE(...)刪除這些。

例子:

data have; 
    testfield="TESTVALUE"; 
    output; 
    testfield="AMBASDF"; 
    output; 
run; 

%let _INPUT_options = %nrquote(WHERE = %(TESTFIELD = %"TESTVALUE%"%)); 
%put &=_input_options; 

data want; 
    set have(%unquote(&_INPUT_options.)); 
run; 
+0

謝謝你的迴應。不幸的是,%NRQUOTE是當where文本框被填充並且不能在該文本框之外編輯時系統生成的。將%UNQOUTE放在where語句中將錯誤移動到%UNQOUTE的開頭,似乎無法解析%UNQOUTE – Cliff

0

謝謝大家的響應。長話短說,我最終創建了SAS故障排除故障單。分析師告訴我,他們現在已經記錄了這個問題,現在應該在DI的未來迭代中解決。

臨時解決方案是創建一個新的轉換,有輕微的改變,之前的輸入選項添加UNQOUTE(如由Joe上面提到)的源代碼:

PROC製表數據= & _Input ( %unquote(& _INPUT_options))%unquote(& procOptions);

對於那些有興趣的人,您需要在項目的公共子文件夾中創建轉換,以便其他人可以使用它。不是我所希望的,而是等待版本更新時可行的解決方案。