前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SAS X Command Execute Python Code

SAS X Command Execute Python Code

作者头像
Setup
发布2019-10-21 17:11:31
1.5K0
发布2019-10-21 17:11:31
举报
02

小编最近在潜心研究外部数据导入SAS,深感Excel的导入的不便利,想实现程序控制将Excel改为CSV在通过CSV导入SAS。想着想着,就想到用外部语言来实现文件的另存为的功能,开始呢,想用Excel中的VAB来实现,后来呢觉得SAS执行Excel里面Macro不太方便~因此就想用Python来实现。

说到Excel的Macro来另为CSV

请见下代码

/*可以实现的功能是将文件夹下所有的Excel都另存为CSV*/

Sub SaveToCSVs()

Dim fDir As String

Dim wB As Workbook

Dim wS As Worksheet

Dim fPath As String

Dim sPath As String

fPath = "填写路径"

sPath = " 填写路径"

fDir = Dir(fPath)

Do While (fDir <> "")

If Right(fDir, 4) = ".xls" Or Right(fDir, 5) = ".xlsx" Then

On Error Resume Next

Set wB = Workbooks.Open(fPath & fDir)

'MsgBox (wB.Name)

For Each wS In wB.Sheets

wS.SaveAs sPath & wB.Name & ".csv", xlCSV

Next wS

wB.Close False

Set wB = Nothing

End If

fDir = Dir

On Error GoTo 0

Loop

End Sub

下面还是回到SAS中来

01

前奏:SAS Check 某一文件是否存在

/*我这个Macro的功能呢:创建一个Macro Var ,如果某一路径下某一文件存在,则返回值1

如果不存在则返回0*/

%macro dde_file_yn(myfilerf);

%local _Localhave;

%if %sysfunc(fileexist(&myfilerf)) %then %do;

%put NOTE:The external file &myfilerf does exist.;

%let _Localhave=1;

%end;

%else %do;

%put NOTE:The external file &myfilerf does not exist.;

%let _Localhave=0;

%end;

&_Localhave.

%mend dde_file_yn;

02

开始本文重点了!重点!重点!(重要的事说三遍)

首先: Option选项;

options noxsync noxwait;/*控制DOS窗口不等待*/

%let path=填写路径你要转化Excel的位置;

data _null_;

if %dde_file_yn(&path.\xls2csvpy.py)=1 then do;

x "del

&path.\xls2csvpy.py

";

run; /*本段代码实现的功能:检查制定文件夹,待产生的py文件是否存在,如果存在则利用X command 删除该文件,为什么要删除呢,因为我马上就要在产生一个这样的py程序*/

SAS生成Python程序

需要说明:小编用的是Python3.7

用到Python的包有:

pandas

openpyxl

xlwt

xlrd

如何安装: 安装好Python后,在CMD命令行中输出 Pip install pandas 等等..

扯远了,还是回到主题上,SAS生成Python代码

data _NULL_;

file "&path.\xls2csv_py.py" encoding="utf-8" lrecl=30000; /*生成Python程序文件,设置编码*/

put "import pandas as pd";/*导入Pandas包*/

put "data_xls = pd.read_excel(r'&path.\&csvname.','&sheetname.',index_col=0,header=0,skiprows=0)";

put "data_xls.to_csv(r'&path.\&csvname..csv', encoding='gb2312')";/*输出CSV,以及设置编码*/

put "print(data_xls)";

run;

生成Python代码后,就可以准备调用和执行Python代码了

/*下面这段代码我个人觉得我好有成就感,为啥让我有成就感呢,因为利用SAS实现了一个延迟执行的效果: 怎么样一个延迟执行呢?由于前面的SAS执行生成Python文件是需要时间的去生成Python文件的,如果执行完上面的,立刻运行X Command执行Python文件可能会失败,因为Python文件还没有生成,为了解决这个问题,我引入了循环和最开始的%dde_file_yn(check文件是否存在),如何文件没有生成则一直循环下,直到Check到Python文件生成了然后就调用X Command 执行Python语句。。(不要笑我,我的感点就是这么低)

如果各位看官还有更好的思路,希望可以和我讨论一下。。*/

data _null_;

if %dde_file_yn(&path.\xls2csv_py.py)=0 then ym=0;

do until (%dde_file_yn(&path.\xls2csv_py.py)=1);

put ym;

ym+1;

end;

x " %superq(path)\xls2csv_py.py";

run;

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-11-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SAS程序分享号号号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档