3

众所周知,SAS 需要特别注意句子中的引号。

例如

%let quoted="I'd like to";
data temp;
    set temp;
    quoted="&quoted";
run;

提交时遇到错误。

事实上,我需要将数据从另一个数据集复制到一个数据集中,其中有很多包含引号的记录。赋值时,发生错误,数据步停止执行,导致其余代码无效。所以在这种情况下,不可能通过添加重复的引号来修改原始数据集,这是没有意义的。

因此,不必添加一个重复的,比如“我想”,有没有其他方法可以避免错误,或者让数据步骤继续执行?

谢谢,

4

2 回答 2

5

使用宏语言(包括 %let 命令)时,您不想使用引号来标识文本字符串。要在字符串中放置单引号,您必须使用宏实用程序屏蔽函数之一,例如 %str()。使用 %let 在宏变量中放置单个不匹配引号的正确语法如下所示。单引号前的 % 符号是一个转义字符,告诉 SAS 后面的字符(单引号)应该用作文字。另请注意,我已从 %let 中删除了双引号,因为它们不是必需的。

%let quoted=%str(I%'d like to);
data temp;    
    quoted="&quoted";
run;

干杯抢

于 2011-05-10T20:02:30.387 回答
2

我不确定您在实际情况下要达到什么目的,但在上述情况下,删除数据步骤中的双引号可以解决。

%let quoted="I'd like to";
data temp;
    set temp;
    quoted=&quoted;
run;
于 2011-05-10T06:03:26.303 回答