gpt4 book ai didi

python - 从 SAS 运行 Python 脚本

转载 作者:太空宇宙 更新时间:2023-11-04 02:50:46 25 4
gpt4 key购买 nike

我有一个 SAS 脚本,我需要从中启动一个 Python 脚本。我需要 SAS 脚本从 PATH 环境变量中找到“python.exe”文件的第一个路径,而不是对特定 python 安装的路径进行硬编码。

这是我尝试使用的代码:

%let progdir = C:\Temp\scripts;
%let pypath = C:\Temp\pypath.txt;

x "if exist &pypath (del &pypath /Q)";
x "for %i in (python.exe) do @echo.%~$PATH:i >> &pypath"; run;

data null; infile "&pypath" length=reclen obs=1;
input location $varying254. reclen;
call symput('runpython', trim(location));
run;

x "%bquote(&runpython) &progdir./gtfs_collapse_routes.py";
x "if exist &pypath (del &pypath /Q)"; run;

第二个 x 调用似乎正确执行,因为 &pypath 文件是用预期内容创建的。但是,此代码会导致我想消除的 SAS 警告:

WARNING: Apparent invocation of macro I not resolved.

这显然是对第二个 x 调用中的 %i 的引用,但我不知道如何避免此警告。 (我最初想使用 x "where python >> &pypath" 获取 python 路径,但由于未知原因,即使从 cmd.exe 运行该命令时,它也根本无法创建文件.)


在@Joe 向正确的方向提供帮助后,这是我更新的工作代码,用于在没有警告的情况下获取 python 路径:

%let command = %nrstr(for %i in (python.exe) do @echo.%~$PATH:i);
x "&command >> &pypath"; run;

最佳答案

当您希望能够解析宏变量时,会使用 SAS 中的双引号。另一方面,单引号会阻止宏变量的解析 - 并且还会阻止 SAS 尝试解析看起来像宏变量的东西,就像在本例中一样。

x '... stuff ... ';

如果需要,您也可以使用宏引号(%NRSTR() 等),但我认为这里常规的单引号就足以满足您的需要,除非您没有告诉我们一些事情。

关于python - 从 SAS 运行 Python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43945354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com