专栏首页SAS程序分享号号号SAS X Command Execute Python Code

SAS X Command Execute Python Code

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;

本文分享自微信公众号 - SAS程序分享号号号(xiaocgn),作者:Setup~

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-11-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • SAS- Send email&&Macro-Pyh_file2zip

    很久很久以前,有人问小编:SAS如何实现发邮件的功能,小编尴尬的反问道:SAS居然还能发邮件?是的,SAS可以实现发邮件的功能。以前觉得这个功能好鸡肋,现在小编...

    Setup
  • SAS-解决编程中遇到的几个小问题...

    自从小编开通了公众号流量主后,发现真的可以挣钱啊,写一篇推文大概能挣一个午餐钱,万分贫穷的小编发现了“脱贫”的一条捷径,于是每天都干劲十足,满脑子想的都是写推文...

    Setup
  • SAS-编程中的小技巧(四)

    SAS软件初始配置,其实是设置了自动保存代码的功能,好像是每10分钟保存一次,这个时间小编觉得有点长,毕竟10分钟能敲下好多代码...所以啊,就看看如何设置把这...

    Setup
  • python实现磁盘日志清理

    py3study
  • shell十三问,为linux学习打基础(三)

    本文整理并转自CU上的帖子[学习共享] shell 十三問?,此贴是2003年发表的,但却是相当不错的linux基础知识汇集贴,原帖主使用的台湾风格,本文加以简...

    小小科
  • file命令

    file命令用来探测给定文件的类型,file命令对文件的检查分为文件系统、魔法文件和语言检查3个过程。

    WindrunnerMax
  • Linux shell ${}简单用法

    Linux shell ${}简单用法 [转]http://linux.chinaunix.net/techdoc/develop/2007/05/05/9...

    汤高
  • Uploads-labs上传绕过(上)

    链接:https://pan.baidu.com/s/1lMRBVdQyFuKOgNlWPUoSSQ

    字节脉搏实验室
  • 解决flask接口返回的内容中文乱码的问题

    给app配置app.config[‘JSON_AS_ASCII’] = False,即:

    砸漏
  • python3第七天(输入和输出)

    输出值的方式:1,表达式。2,print()函数。3,文件对象的write()函数

    py3study

扫码关注云+社区

领取腾讯云代金券