如何从SAS远程服务器运行本地脚本?是否有localsubmit等效命令?
从远程SAS服务器触发本地脚本执行的解决方案
刚好我之前也遇到过类似的需求,遗憾的是SAS Enterprise Guide并没有提供和rsubmit完全对称的localsubmit命令,来直接从远程服务器触发本地SAS会话执行代码。不过针对你提到的两个具体场景,我们有切实可行的替代方案:
场景1:访问本地专属大容量存储路径I:\folder1\folder2
这种场景的核心是解决远程无法访问本地路径的问题,我们可以通过「远程数据导出→传输到本地→本地处理」的流程实现:
- 第一步:在远程服务器上,将需要处理的数据导出为通用格式(比如SAS数据集
.sas7bdat、CSV或XPT),示例代码:proc export data=remote_data_set outfile="/temp/remote_data.csv" dbms=csv replace; run; - 第二步:将导出的文件传输到本地
I:\folder1\folder2路径。你可以用EG自带的文件传输功能手动拉取,或者如果IT允许,用SAS的filename语句配合FTP/SMB协议自动传输:filename local_file ftp "remote_data.csv" host="your_local_machine_ip" user="your_username" pass="your_password" recfm=v lrecl=32767 get cd="/temp" dest="I:\folder1\folder2"; - 第三步:在EG本地会话中编写处理该文件的代码,然后可以通过EG的任务调度功能设置依赖,让本地任务在远程传输完成后自动执行;或者在远程代码末尾生成一个标记文件,本地运行循环检测脚本,触发执行。
场景2:保留dbms=excel架构导出多份数据到同一Excel文件
这个需求的关键是利用本地SAS对Excel的原生支持,流程如下:
- 第一步:将远程服务器上需要导出的数据集同步到本地。可以直接通过EG的「导入数据」功能从远程服务器拉取SAS数据集,或者用远程
proc export导出为CSV后传输到本地。 - 第二步:在本地SAS会话中复用你现有的
proc export代码,将多个数据集导出到同一Excel文件的不同工作表,示例代码:/* 导出第一个数据集到Sheet1 */ proc export data=local_data1 outfile="I:\output\combined.xlsx" dbms=excel replace; sheet="Sheet1"; run; /* 导出第二个数据集到Sheet2,不覆盖已有文件 */ proc export data=local_data2 outfile="I:\output\combined.xlsx" dbms=excel replace; sheet="Sheet2"; run; - 第三步:如果需要自动化,把远程数据同步和本地导出步骤整合到同一个EG项目中,设置任务依赖关系,让远程任务完成后自动触发本地导出流程。
另外还有一个进阶方案:如果你的IT团队允许配置,可以使用SAS Stored Processes实现反向调用,但这个需要额外的权限和配置,一般来说前面的两种方案已经能满足你的需求了。
内容的提问来源于stack exchange,提问作者Raunak Thomas
相关产品推荐
相关产品推荐

