前缀为“”的SAS名称不起作用
我试图获取所有前缀为TIME_INTERVAL的fname变量。但是,下面的put语句似乎没有输出任何内容。我想知道原因是什么前缀为“”的SAS名称不起作用,sas,Sas,我试图获取所有前缀为TIME_INTERVAL的fname变量。但是,下面的put语句似乎没有输出任何内容。我想知道原因是什么 %LET TIME_INTERVAL='MINUTE15'; data _null_; set filenames; by fname; if fname =: "&TIME_INTERVAL"; put fname; run; 但是,如果我将put语句置于If语句之上,它可以正确输出: %LET TIME_INTERVAL='MINUTE15'; data
%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'
开头的文件名,但我认为您实际上希望查找以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;
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;
没有一个FNAME值像宏变量那样有单引号。我认为单引号只是表示字符串?对于宏处理器来说,一切都是字符串。让时间间隔=分钟15代码>和
%LET TIME_INTERVAL='MINUTE15'代码>?第二个将在宏变量中存储单引号。但是如果fname=:“&TIME\u INTERVAL”,为什么我们需要在中使用引号代码>?在SAS代码中,您需要在字符串文字周围使用引号,这样它就不会查找名为MINUTE15的变量。但宏处理只是用来生成SAS代码。您只需要确保生成的代码是有效的SAS语法,并且与您想要生成的代码匹配。