我有一个函数可以将一种格式的值转换为另一种格式。例如,这类似于将华氏度转换为摄氏度。
很简单,公式就是:
l = -log(20/x)
Run Code Online (Sandbox Code Playgroud)
我从一位同事那里继承了 SAS 代码,该代码针对一系列 x 值进行了硬编码:
"if x= 'a' then x=l;"
Run Code Online (Sandbox Code Playgroud)
这显然是乏味的并且范围有限。
如何最好地将其转换为可以在 SAS 脚本中调用的函数?
我之前在 Python 中将其定义为:
def function(x):
l = -np.log10(20/float(x))
return l
Run Code Online (Sandbox Code Playgroud)
然后只需调用该函数即可。
感谢您的帮助 - 我正在从 Python 调整到 SAS,并试图找出如何进行切换。
如果您有兴趣编写自己的函数,正如乔所说,proc fcmp这是一种方法。这将允许您创建行为类似于 SAS 函数的函数。它与您所得到的 Python 函数非常相似。
它需要进行一些设置,但它确实很好,因为所有函数都保存在 SAS 数据集中,可以在环境之间传输。
下面的代码创建了一个名为 的函数f(),其功能与 Python 函数相同。
proc fcmp outlib=work.funcs.log;
function f(x);
l = log10(20/x);
return(l);
endfunc;
run;
options cmplib=work.funcs;
Run Code Online (Sandbox Code Playgroud)
这是在做三件事:
f(),它接受一个输入,xwork.funcs包含所有函数的名为的数据集中log不用太担心标签。如果您想要许多不同的功能包,例如:时间、日期、字符串等,它会很方便。它对组织很有帮助,但它是必需的标签。大多数时候我只是这样做work.funcs.funcs。
options cmplib=work.funcs表示加载funcs包含您感兴趣的所有功能的数据集。
您可以在下面测试您的功能:
data test;
l1 = f(1);
l2 = f(2);
l10 = f(10);
run;
Run Code Online (Sandbox Code Playgroud)
输出:
l1 l2 l10
1.3010299957 1 0.3010299957
Run Code Online (Sandbox Code Playgroud)
此外,SAS 确实有一个 Python 接口。如果您更喜欢使用 Python 进行编程,请查看 SASPy,以获得 SAS 和 Python 的所有优势。