SAS存储过程服务器的一个“功能”是根据客户端的上下文设置区域设置can change。在我的情况下,会话可能是en_gb
或en_us
,具体取决于Excel或Chrome是否发送了相同的请求。
这可能会导致同一报告的结果不同,例如使用ANYDTDTE时。风格的信息。快速解决方法是明确设置options locale=xxx;
,但为了衡量这一点的重要性,最好理解:
根据会话区域设置,同一程序可以提供不同结果的主要(非装饰)方式是什么?
答案 0 :(得分:2)
语言环境影响程序的主要方式是字符集/编码和日期/时间默认值。
字符集(或编码)部分由区域设置决定,例如,如果一个区域设置类似于en-us
且一个区域为utf8
,则会产生巨大差异。 SAS不仅经常最终默认使用会话编码来读取文件(如果它们未在程序或文件头中明确指定),而是SAS在读入SAS数据集更改后如何处理字符。 DBCS编码将为每个字符存储两个字节,而不是一个,如果区域设置为en-us
并且您希望utf8
,则可能无法处理某些不在两者之间转码的字符。
日期默认值也非常相关。 en-gb
可能假设10/8/2015
是2015年8月10日,而en-us
则认为是2015年10月8日。这是一个很好的理由,当您可以避免使用anydtdte.
时, 当然。您可以通过明确设置DATESTYLE
system option来避免此问题。您可能在默认输出格式方面也存在一些差异,例如ddmmyy10.
中的分隔符或类似内容。
要查看由于区域设置可能产生的差异,请参阅documentation for the LOCALE system option。这提到了四种设置:
此外,TRANTAB
设置为设置ENCODING
。