SAS 支持中文变量名吗?【转载】

      也许你会诧异,为什么要问这个问题。SAS要编程,要编程就要用英文,英文编程变量当然是英文了。但是当我们拿到一堆别人给我们的Access数据文件、EXCEL数据文件,或者是EpiData 数据文件,打开一看,发现里面几百个变量全部都是中文时(不要说这种情况你没遇到过,或者你坚信你不会遇到),我们会怎么想:改成英文变量名?如果有那份毅力和决心,花几个小时全部逐一改的话,那确实令人佩服。不过,我们大多数人肯定会想:SAS 支持中文变量名吗?能的话我就可以直接导入了事了。

      于是你用infile语句,用proc import过程等开始倒腾,很可惜,SAS全都报错。可能你会就此止步,叹息道:“看来SAS确实不能支持中文”。SAS不能支持中文变量名吗?答案当然是能的。不过我们需要稍做一些设置,扩展一下SAS默认的命名规则。 方法是:

options validvarname=any;

或许很多SAS USER都已知道。不过我们还是可以稍微扩展下。

 

      实际上,SAS的命名规则有三个版本。V7,UPCASEANYSAS默认的是V7

其规则是:

  •          最长32字符
  •          首字符可以拉丁字母和下划线,后继的字符可是字母和下划线,还有数字符号
  •          末尾空格忽略,且左对齐
  •          中间不能包含空格和特殊字符(下划线除外)
  •          字符大小写均可,不作区分
  •          不能为SAS自动变量,如_N__ERROR_

 

     可见,默认的SAS命名系统V7不并支持中文、也不支持变量名中有空格。要想打破这种限制,我们就可以将validvarname设置为any,这样就可以满足我们的要求了。为什么any就支持了?我们可以深入的查看一下,any 所支持的具体内容:

  •          可以包含或以任何字符开头。包括空格、国家标标字符(national characters)、特殊字符以及多字节字符。
  •          最长32位字符
  •          不可包含空字节
  •          保留开头的空格,舍弃末尾的空格
  •          至少包含一个字符,不能全部为空。
  •          字符大小写均可,不作区分

 

      由此可见,指定为ANY后,我们不仅可以支持中文,还可以支持其它国家的文字。不过,需要小心的是,如果变量名不符合V7的规则,我们还需要名称文字(name literal)的形式命名。即用引号引起来,并在末尾加字符n, n大小写闺均可。如图片中的25个变量即是这种情况。但是如果只是汉字字符,好像可以不用名称文字形式。

      至于upcase,我想,你肯定也经望文知意了。 

      附录:产生图片中的数据集的代码

 

options validvarname=any; 

data  webgu;

       SAS中文变量名="YES";

       SAS中文變量名="YES";
 
       '2SAS中文变量名'n="YES";
 
       '2SAS中文變量名'n="YES";
 
       'SAS空 格变量名'n="YES"; 
 
       'SAS空#  @ %格特殊字符变量名'n="YES"; 
 
run;

  

posted @ 2013-12-12 16:28  寒秋绝月  阅读(5183)  评论(0编辑  收藏  举报