簡體   English   中英

如何在SAS中用特殊字符連接字符串

[英]how to concatenate string with special character in 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.));

沒用 當我嘗試放置時,我什么也看不到。 您有解決的辦法嗎?

您將使用*.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;

問題是您正在生成/ *序列,該序列指示塊注釋的開始。 因此,您需要引用其中一部分。 一個簡單的更改是使用%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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM