前缀不起作用的SAS名称
我试图获取所有前缀为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
您要求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;
'%LET TIME_INTERVAL = MINUTE15;'和'%LET TIME_INTERVAL ='MINUTE15'之间有什么区别;'? –
第二个将单引号存储在宏变量中。 – Tom
但是为什么我们需要'if fname =:&TIME_INTERVAL“中的引号;'? –
您的FNAME值中没有像您的宏变量那样的单引号。 – Tom
我认为单引号只是意味着字符串? –
一切都是宏处理器的字符串。 – Tom