我试图连接以下两个字符串:
String1 = /data/projects/flat_file/meteo/
String2 = *.json
在sas我做这个代码:
%let string1 = /data/projects/flat_file/meteo/;
%let string2 = %sysfunc(compress('*.json',"'"));
但是当我尝试以这种方式连接它们时:
%let merge = %sysfunc(cats(&string1., &string2.));
它不起作用。当我试图让我什么也看不见。 您有什么想法来解决它吗?
答案 0 :(得分:2)
你要使用*.json
发表评论,使用%str来避免这种情况(压缩是无用的)
2个字符串之间的连接生成/*
,这也是开始评论的符号。
%let string1 = /data/projects/flat_file/meteo/;
%let string2 = %str(*.json);
%put &string1.;
%put &string2.;
%let merge = &string1.&string2;
%put &merge;
如果您需要进一步澄清,请与我们联系。
如果您的日志中显示任何内容,是因为您的系统仍然锁定在该评论中,请运行以下代码以“解锁”您的sas系统:
*'; *"; *); */; %mend; run;
答案 1 :(得分:0)
问题是您正在生成指示块注释开始的/ *序列。所以你需要引用其中的一部分。一个简单的改变是使用%qsysfunc()而不是%sysfunc(),以便引用结果字符串。
%let string1 = /data/projects/flat_file/meteo/;
%let string2 = *.json ;
%let merge = %Qsysfunc(cats(&string1,&string2)) ;
然而,由于CATS()函数尝试确定其参数的数据类型的方式,使用CATS()函数来连接宏代码中的字符串对于许多宏值不能很好地工作。相反,您可以使用常规宏语法来连接并添加一些宏引用。我发现对于这种类型的路径分配,最容易引用除法/。因此,请将尾随的斜线从路径中删除,并在连接时将其添加回来。
%let path = /data/projects/flat_file/meteo ;
%let file = *.json ;
%let sep = %quote(/) ;
%let fullpath = &path.&sep.&file;