前缀不起作用的SAS名称

时间:2017-08-03 19:58:23

标签: 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 _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

1 个答案:

答案 0 :(得分:1)

您要求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;