簡體   English   中英

宏變量在Proc SQL中創建宏變量時生成空間

[英]Macro variable generating a space while creating a macro variable in Proc SQL

我正在創建一個宏變量但是當我在Proc Report中使用相同的宏變量時,這個宏會在值前面生成一個空格

選擇COUNT(DISTINCT USUBJID)為:來自DMDD的N1,其中ARMN = 1; 在此輸入圖像描述 我如何在相同的代碼中糾正它?

這實際上是為PROC SQL SELECT INTO“按設計工作”。 雖然所有其他答案在某些方面都是正確的,但這是一個特殊情況,而不是普通的宏變量,例如

%let var=          5       ;
%put [&var];

只會返回的地方

[5]

雖然這不是那樣做的。 這是PROC SQL SELECT INTO的行為,是故意的。

這兩個陳述:

proc sql;
 select name into :name from sashelp.class where name='Alfred';
 select name into :shortname separated by ' ' from sashelp.class where name='Alfred';
quit;
%put `&name` `&shortname`;

是不一樣的。 separated by ' ' (或任何其他分隔的)分隔將始終自動修剪,除非包含notrim ,如果你有9.3或更新,你有一個新選項, trimmed ,如果你打算選擇一個變量,你可以使用。 我認為這種行為是在9.2中引入的(默認情況下,非修剪選擇沒有分隔符)。

如果您只選擇單個值,則以separated by ' '添加將不會影響您的結果,除非導致修剪。

這是因為任何宏變量都存儲為字符。 如果源數據是數字,則SAS使用best12。 格式轉換為字符,因此結果填充前導空格。 我通過使用CATS功能來消除前導和尾隨空白。 您不能使用LEFT或STRIP函數,因為它們只能用於字符變量。

Select cats(COUNT(DISTINCT USUBJID)) into: N1 from DMDD where ARMN=1; 
Select trim(put(COUNT(DISTINCT USUBJID), 16. -L)) into: N1 from DMDD where ARMN=1;

使用PUT()使用-L(左)對齊格式化輸出字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM