2017-08-03 103 views
0

我試圖獲取所有前綴爲TIME_INTERVAL的fname變量。但是,看起來下面的put語句沒有輸出。我想知道是什麼原因?前綴不起作用的SAS名稱

%LET TIME_INTERVAL='MINUTE15'; 
data _null_; 
set filenames; 
by fname; 
if fname =: "&TIME_INTERVAL"; 
put fname; 
run; 

如果我把PUT語句if語句以上,但是,它可以輸出正確:

%LET TIME_INTERVAL='MINUTE15'; 
data _null_; 
set filenames; 
by fname; 
put fname; 
if fname =: "&TIME_INTERVAL"; 
run; 

更新:

數據集文件名的內容:

MINUTE15_group0.csv 
MINUTE15_group1.csv 
MINUTE15_group2.csv 
MINUTE15_group3.csv 
MINUTE15_group4.csv 
MINUTE15_group5.csv 
MINUTE15_group6.csv 
MINUTE15_group7.csv 
MINUTE15_group8.csv 
MINUTE5_group0.csv 
MINUTE5_group1.csv 
MINUTE5_group2.csv 
MINUTE5_group3.csv 
MINUTE5_group4.csv 
MINUTE5_group5.csv 
MINUTE5_group6.csv 
MINUTE5_group7.csv 
MINUTE5_group8.csv 
SECOND5_group0.csv 
SECOND5_group1.csv 
SECOND5_group2.csv 
SECOND5_group3.csv 
SECOND5_group4.csv 
SECOND5_group5.csv 
SECOND5_group6.csv 
SECOND5_group7.csv 
SECOND5_group8.csv 
+0

您的FNAME值中沒有像您的宏變量那樣的單引號。 – Tom

+0

我認爲單引號只是意味着字符串? –

+0

一切都是宏處理器的字符串。 – Tom

回答

1

您要求SAS查找以'MINUTE15'開頭的文件名,但我認爲y ou實際上想要查找以MINUTE15開頭的文件名。

一切都是宏處理器的字符串,因此不需要在宏代碼中的常量文本週圍添加引號。如果添加它們,它們將成爲正在生成的代碼的一部分,並傳遞給SAS以運行。所以你的程序生成了這個IF語句。

if fname =: "'MINUTE15'"; 

您可以刪除單引號。

%LET TIME_INTERVAL=MINUTE15; 
data _null_; 
    set filenames; 
    if fname =: "&TIME_INTERVAL"; 
    put fname; 
run; 

或刪除雙引號。

%LET TIME_INTERVAL='MINUTE15'; 
data _null_; 
    set filenames; 
    if fname =: &TIME_INTERVAL; 
    put fname; 
run; 
+0

'%LET TIME_INTERVAL = MINUTE15;'和'%LET TIME_INTERVAL ='MINUTE15'之間有什麼區別;'? –

+0

第二個將單引號存儲在宏變量中。 – Tom

+0

但是爲什麼我們需要'if fname =:&TIME_INTERVAL「中的引號;'? –