如何复制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型'
答案 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;