0

Unix 服务器上的一段代码不工作,但在 PC SAS 上工作。在 UNIX SAS 中执行时,输出数据集 pc_pf_yes_1 和 pc_pf_no_1 都有 0 个观察值,但没有观察到错误。在 PC SAS 中,代码可以正常工作并按预期填充数据集。

以下数据步位于宏中。

data pc_pf_yes_1 pc_pf_no_1;
    set pc_&month._2;
    if primary_flag = "Y" then output pc_pf_yes_1;
    else if primary_flag = "N" then output pc_pf_no_1;
run;

primary_flag 是一个二进制变量,其值为 Y 和 N,存储为长度为 1 的字符串。&month。是一个宏变量,存储用于数据选择的月份名称。

在我不知道的宏中是否存在 UNIX SAS 的怪癖?

4

1 回答 1

2

检查数据。如果 primary_flag 的值具有前导空格或小写,则它不会匹配“Y”或“N”。请注意,尾随空格无关紧要。要查看前导空格,请尝试使用$QUOTE.格式打印变量。

如果您从文本文件中读取数据,则 primary_flag 的末尾可能有一个回车符,这在正常打印输出中也很难看到。在 PC 上,回车是行尾标记的一部分,但 Unix 只使用换行作为行尾标记,因此回车可以在数据中结束。在 INFILE 语句上使用 TERMSTR=CRLF 选项。或者您可以使用compress(primary_flag,'0d'x)删除回车符。要查看这些和其他隐藏字符,您可以使用$HEX.格式打印数据。或者使用LINE读取文本文件的数据步骤中的语句。

于 2015-10-07T15:01:48.517 回答