错误:VTYPE功能仅在DATA步骤中有效

时间:2017-07-02 23:14:51

标签: sas

如何复制vtype中的proc fcmp功能?

proc fcmp;  
  have=1;
  want=vtype(have);
quit;

给出:

  

错误:VTYPE功能仅在DATA步骤中有效。用户   将搜索已定义的库以查找此函数的定义。

解决方案不应涉及扫描变量值。

我尝试解决这个问题的方法如下:

proc fcmp;  
  function vtype2 (missval $) $;
    if cats(missval)='.' then return ("N");
    else return("C");
  endsub;
  have=1;
  temp=have;
  call missing(temp);
  want=vtype2(temp);
  file log; put want=;
quit;

我必须使用vtype2来避免以下情况:

  

错误:内置SAS功能或SUBROUTINE已存在名称   ' V型'

1 个答案:

答案 0 :(得分:1)

不确定你要求的是什么。变量HAVE是您在函数中定义的。如果你想在你的函数中创建另一个包含指示HAVE类型的变量的变量,你可以对答案进行硬编码。

由于VTYPE()函数返回' N'或者' C'为你的例子,你会使用。

proc fcmp;  
  have=1;
  want='N';
quit;

如果你有一个复杂的FCMP程序,很难找出变量类型而你只想快速添加到它的末尾,那么也许你可以创建一个宏来组合你的VTYPE2中的步骤()函数以及为生成它所需的数据而添加的函数。

%macro vtype(varname,result,tempname=_vtype_&sysindex );
&tempname=&varname;
call missing(&tempname);
if cats(&tempname)='.' then &result='N';
else &result='C';
%mend vtype;

这是测试程序。

proc fcmp;  
  have=1;
  %vtype(have,want)
  if want='N' then put 'HAVE is numeric';
  have2='1';
  %vtype(have2,want2)
  if want2='C' then put 'HAVE2 is character';
quit;