Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
前缀为“”的SAS名称不起作用_Sas - Fatal编程技术网

前缀为“”的SAS名称不起作用

前缀为“”的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

我试图获取所有前缀为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

您要求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语法,并且与您想要生成的代码匹配。