如何在SAS中连接字符串与特殊字符

时间:2015-07-31 09:47:33

标签: string sas

我试图连接以下两个字符串:

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.));

它不起作用。当我试图让我什么也看不见。 您有什么想法来解决它吗?

2 个答案:

答案 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;