python导入sas数据集_运用import过程进行SAS数据导入完全实用教程

运用import过程进行SAS数据导入完全实用教程

1 单个规范格式文件导入。

对单个文件进行导入是我们遇到最多的情况,主要有以下几种:

1.1 对指定分隔符(’|’,’

’,’!’,’ab’等)数据的导入,这里以’!’为例delimiter='!'进行说明:

data _null_;

file 'c:\temp\pipefile.txt';

put"X1!X2!X3!X4";

put "11!22!.! ";

put "111!.!333!apple";

run;

导入程序:

proc import

datafile='c:\temp\pipefile.txt'

out=work.test

dbms=dlm

replace;

delimiter='!';

GUESSINGROWS=2000;

DATAROW=2;

getnames=yes;

run;

注意GUESSINGROWS的值阈为1 到 3276

1.2 对CSV格式的数据进行导入:

data _null_;

file 'c:\temp\csvfile.csv';

put

"Fruit1,Fruit2,Fruit3,Fruit4";

put

"apple,banana,coconut,date";

put

"apricot,berry,crabapple,dewberry";

run;

导入程序:

proc import

datafile='c:\temp\csvfile.csv'

out=work.fruit

dbms=csv

replace;

run;

1.3 对tab分隔数据的导入:

data _null_;

file 'c:\temp\tabfile.txt';

put "cereal" "09"x "eggs" "09"x

"bacon";

put "muffin" "09"x "berries"

"09"x "toast";

run;

proc import

datafile='c:\temp\tabfile.txt'

out=work.breakfast

dbms=tab

replace;

getnames=no;

run;

1.4 对dbf数据库数据进行导入:

proc import

datafile="/myfiles/mydata.dbf"

out=sasuser.mydata

dbms=dbf

replace;

run;

1.5对excel数据进行导入:

PROC IMPORT OUT= hospital1

DATAFILE= " C:\My Documents\Excel Files\Hospital1.xls "

DBMS=EXCEL REPLACE;

SHEET="Sheet1$";

GETNAMES=YES;

MIXED=NO;

SCANTEXT=YES;

USEDATE=YES;

SCANTIME=YES;

RUN;

1.6对access数据进行导入:

PROC IMPORT DBMS=ACCESS

TABLE="customers" OUT=sasuser.cust;

DATABASE="c:\demo\customers.mdb";

UID="bob";

PWD="cat"; WGDB="c:\winnt\system32\system.mdb";

RUN;

proc print data=sasuser.cust;

run;

1.7 import过程步中,dbms选项汇总:

Identifier

Input Data

Source

Extension

Host Availability

ACCESS

Microsoft Access 2000

or 2002 table

.mdb

Microsoft Windows *

ACCESS97

Microsoft Access 97 table

.mdb

Microsoft Windows *

ACCESS2000

Microsoft Access 2000 table

.mdb

Microsoft Windows *

ACCESS2002

Microsoft Access 2002 table

.mdb

Microsoft Windows *

ACCESSCS

Microsoft Access table

.mdb

UNIX

CSV

delimited file

(comma-separated values)

.csv

OpenVMS Alpha, UNIX, Microsoft Windows

DBF

dBASE 5.0, IV, III+,

and III files

.dbf

UNIX, Microsoft Windows

DLM

delimited file (default

delimiter is a blank)

.*

OpenVMS Alpha, UNIX, Microsoft Windows

EXCEL

Excel 2000 or 2002

spreadsheet

.xls

Microsoft Windows *

EXCEL4

Excel 4.0

spreadsheet

.xls

Microsoft Windows

EXCEL5

Excel 5.0 or 7.0 (95)

spreadsheet

.xls

Microsoft Windows

EXCEL97

Excel 97 or 7.0 (95)

spreadsheet

.xls

Microsoft Windows *

EXCEL2000

Excel 2000 spreadsheet

.xls

Microsoft Windows *

EXCELCS

Excel spreadsheet

.xls

UNIX

JMP

JMP table

.jmp

UNIX, Microsoft Windows

PCFS

Files on PC server

.*

UNIX

TAB

delimited file (tab-delimited values)

.txt

OpenVMS Alpha, UNIX, Microsoft Windows

WK1

Lotus 1-2-3 Release 2

spreadsheet

.wk1

Microsoft Windows

WK3

Lotus 1-2-3 Release 3

spreadsheet

.wk3

Microsoft Windows

WK4

Lotus 1-2-3 Release 4

or 5 spreadsheet

.wk4

Microsoft Windows

2 导入一个文件夹下的所有文件的数据。

2.1下面的代码导入一个文件夹下的所有文件的数据,要使用本代码需注意几点:首先,这个文件夹下的数据文件必须是同一类型分隔的数据,比如例子中都是tab分隔的txt文件,当然也可以对本代码进行改进,例如中间的proc

import的dbms改为excel,就可以导入excel文件了。其次,本代码直接将文件名作为SAS数据集的名字,因此文件名必须是英文,且满足SAS命名规则。

%macro directory(dir=);

%let

rs=%sysfunc(filename(filref,&dir));

%let

did=%sysfunc(dopen(&filref));

%let nobs=%sysfunc(dnum(&did));

%do i=1 %to &nobs.;

%let

name=%qscan(%qsysfunc(dread(&did,&i)),1,.);

%let

ext=%qscan(%qsysfunc(dread(&did,&i)),-1,.);

proc import

out=&name.

datafile="&dir.\&name..&ext"

dbms=tab replace;

getnames=no;

datarow=1;

run;

%end;

%let rc=%sysfunc(dclose(&did));

%mend;

%directory(dir=C:\PRIVATE);

如果要将数据集进行汇总到一张表,或者则可以直接将proc import

out=&name中的&name改为a&i,然后对所有的a:数据集进行set操作。除此之外,我们还可以对&ext进行设置来达到读取指定文件格式的数据。

2.2 这里运用pipe读取到文件名称,再读取数据。首先建立三个数据集:

data _null_;

file 'c:\junk\extfile1.txt';

put "05JAN2001 6 W12301 1.59

9.54";

put "12JAN2001 3 P01219 2.99

8.97";

run;

data _null_;

file 'c:\junk\extfile2.txt';

put "02FEB2001 1 P01219 2.99

2.99";

put "05FEB2001 3 A00901 1.99

5.97";

put "07FEB2001 2 C21135 3.00

6.00";

run;

data _null_;

file 'c:\junk\extfile3.txt';

put "06MAR2001 4 A00101 3.59

14.36";

put "12MAR2001 2 P01219 2.99

5.98";

run;

filename blah pipe 'dir C:\Junk /b';

data _null_;

infile blah truncover

end=last;

length fname $20;

input fname;

i+1;

call

symput('fname'||trim(left(put(i,8.))),scan(trim(fname),1,'.'));

call

symput('pext'||trim(left(put(i,8.))),trim(fname));

if last then call

symput('total',trim(left(put(i,8.))));

run;

%macro test;

%do i=1 %to

&total;

proc import

datafile="c:\Junk\&&pext&i"

out=work.&&fname&i

dbms=dlm

replace;

delimiter=' ';

getnames=no ;

run;

proc print

data=work.&&fname&i;;

title

&&fname&i;

run;

%end;

%mend;

%test;

这里,如果要导入指定文件类型的数据,例如txt,则只需要将filename blah pipe

'dir C:\Junk /b';改为filename blah pipe 'dir C:\Junk.*.txt

/b';即可。

除了用filename blah pipe 'dir C:\Junk.*.txt

/b';得到指定类型的文件名,我们还可以%sysexec dir *.xls /b/o:n

>

flist.txt;来将xls文件输出到指定的文件中,供读取操作用。这个将在下面的内容作介绍。

3 导入excel表中的所有sheet的数据,并将其汇总到一个数据表中。

3.1 Excel表是sas导入导出最多的数据表之一,本例中,我们将导入一个excel中的不同的数据

%let

dir=C:\ExcelFiles;

%macro ReadXls (inf);

libname excellib excel

"&dir.\&inf";

proc sql noprint;

create table

sheetname as

select

tranwrd(memname, "''", "'") as sheetname

from

sashelp.vstabvw

where

libname="EXCELLIB";

select

count(DISTINCT sheetname) into :cnt_sht

from

sheetname;

select

DISTINCT sheetname into :sheet1 -

:sheet%left(&cnt_sht)

from

sheetname;

quit;

libname excellib clear;

%do i=1 %to &cnt_sht;

proc import

datafile="&dir.\&inf"

out=sheet&i replace;

sheet="&&sheet&i";

getnames=yes;

mixed=yes;

run;

proc append base=master

data=sheet&i force;

run;

%end;

%mend ReadXls;

%ReadXls(all1.xls);

这样,我们可以通过%ReadXls(all2.xls);

%ReadXls(all3.xls);等来得到多个excel文件的所有数据集。

3.2 我们可以结合3.1和2.1或2.2的方法来读取多个文件中的多个表。这里再介绍一种新的读取多个文件的方法:

options noxwait;

%macro ReadXls (dir=);

%sysexec cd &dir; %sysexec dir

*.xls /b/o:n > flist.txt;

data _indexfile;

length filen

$200;

infile

"&dir./flist.txt";

input filen

$;

run;

proc sql noprint;

select

count(filen) into :cntfile from _indexfile;

%if

&cntfile>=1 %then %do;

select filen

into

:filen1-:filen%left(&cntfile)

from

_indexfile;

%end;

quit;

%do i=1 %to &cntfile;

libname excellib excel

"&dir.\&&filen&i";

proc sql noprint;

create table

sheetname as

select

tranwrd(memname, "''", "'") as sheetname

from

sashelp.vstabvw

where

libname="EXCELLIB";

select

count(DISTINCT sheetname) into :cnt_sht

from

sheetname;

select

DISTINCT sheetname into :sheet1 -

:sheet%left(&cnt_sht)

from

sheetname;

quit;

%do j=1 %to &cnt_sht;

proc import

datafile="&dir.\&&filen&i"

out=sheet&j replace;

sheet="&&sheet&j";

getnames=yes;

mixed=yes;

run;

data sheet&j;

length

_excelfilename $100 _sheetname $32;

set

sheet&j;

_excelfilename="&&filen&z";

_sheetname="&&sheet&j";

run;

proc append base=master

data=sheet&j force;

run;

%end;

libname excellib clear;

%end;

%mend ReadXls;

%readxls (dir=C:\ExcelFiles);

4 从多个文件夹下读取多个数据。

直接给源代码吧。

%macro etl(ds, ds2,path);

data &ds &ds2;

LENGTH DateTime 8

UserName $ 20

Submit $ 10

SentNumber $ 11

IP $ 15

MessageID $ 15

SendingMode $ 6

Contents $ 160 ;

%let filrf=mydir;

%let

rc=%sysfunc(filename(filrf,"&path"));

%let

did=%sysfunc(dopen(&filrf));

%let

memcount=%sysfunc(dnum(&did));

%do i=1 %to &memcount;

AccountNum+1;

%let counter = AccountNum;

%let

username&i=%sysfunc(dread(&did,&i));

%let filref=mydir2;

%let

file=%sysfunc(filename(filref,"&path\&&username&i"));

%let

op=%sysfunc(dopen(&filref));

%let

flcount=%sysfunc(dnum(&op));

filename FT77F001

"D:\SMSGatewayData2\USERS\&&username&i\*.log";

%do j=1 %to &flcount;

%let

trans&j=%sysfunc(dread(&op,&j));

%put

'&&username&i = '

&&username&i

'&&trans&j= '

&&trans&j

'&flcount = ' &flcount

'&filref = ' &filref

'&filrf = ' &filrf;

infile FT77F001 filename=filename eov=eov end =

done length=L DSD;

INPUT DateTime : ANYDTDTM19.

UserName $

Submit $

SentNumber $

IP $

MessageID $

SendingMode $

Contents $;

output;

%end;

%end;

run;

%mend;

%etl(sms2,

sms,D:\SMSGatewayData2\USERS)

这里就不做测试了,原理其实跟3.2差不多,就是将目录也参数化。

5 参考文献:

A Case Study of Importing Multiple Worksheet Files

http://www2.sas.com/proceedings/sugi31/034-31.pdf

Reading multiple files with PROC IMPORT

http://support.sas.com/kb/24/707.html

How to Invoke PROC IMPORT to read a CSV, TAB or Delimited

File

http://ftp.sas.com/techsup/download/sample/datastep/import.html

Use PROC IMPORT to read a CSV, TAB or delimited file.sas

Reading multiple files with PROC IMPORT.sas

directory_import_dbms.sas

proc_import_dbf.html

http://ftp.sas.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/394341.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【效率专精系列】善用API统一描述语言提升RestAPI开发效率

团队内部RestAPI开发采用设计驱动开发的模式,即使用API设计文档解耦前端和后端的开发过程,双方只在联调与测试时耦合。在实际开发和与前端合作的过程中,受限于众多因素的影响,开发效率还有进一步提高的空间。本文的目的是优化工具…

leetcode剑指 Offer 14- I. 剪绳子(动态规划)

给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的…

数据包提取文件_航测怎样高效提取无人机POS航点数据

无限创新工作室研发的POS数据记录仪是一款采集飞控POS 数据并管理的设备,它将飞控 POS 点数据进行记录,形成单独的POS 数据记录TXT 文本,并独立存储于内存卡,可通过USB、U 盘或内存卡形式对数据进行读取。通过对相机进行拍照控制和…

点击删除表格中的行并提交到数据库

html中&#xff1a; <el-table-column prop"operation" label"操作" width"170"> <template slot-scope"scope"> <el-button size"small" type"danger" click"deleteRow(scope.$index,s…

BZOJ 1878: [SDOI2009]HH的项链

1878: [SDOI2009]HH的项链 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 3548 Solved: 1757[Submit][Status][Discuss]Description HH有一串由各种漂亮的贝壳组成的项链。HH相信不同的贝壳会带来好运&#xff0c;所以每次散步 完后&#xff0c;他都会随意取出一段贝壳&…

分布式 知乎 github_如何使用GitHub本机功能来帮助管理中型分布式团队

分布式 知乎 githubby Alex Ewerlf由AlexEwerlf 如何使用GitHub本机功能来帮助管理中型分布式团队 (How to use GitHub native features to help manage a mid-size distributed team) My team created a wiki page in our private Github repo about how we work on a common…

开始时间小于 结束时间 js_DNF分享红包开始及结束时间 红包有什么奖励相关介绍...

[闽南网]DNF分享红包分享快乐时间从2019年的1月3日开始到1月21日前结束&#xff0c;活动期间玩家每天登录游戏可以得到一个新年红包&#xff0c;使用后可以为同一个频道的玩家送去祝福&#xff0c;根据送出红包的数量得到不同的奖励。(dnf幸运饺子铺活动)(DNF95版新副本攻略)本…

文件的相关操作

将输出的内容直接输出到文件中去 &#xff1a;freopen( “1.txt” , "w" , stdout &#xff09;转载于:https://www.cnblogs.com/ccut-ry/p/7456190.html

leetcode1504. 统计全 1 子矩形(动态规划)

给你一个只包含 0 和 1 的 rows * columns 矩阵 mat &#xff0c;请你返回有多少个 子矩形 的元素全部都是 1 。 示例 1&#xff1a; 输入&#xff1a;mat [[1,0,1], [1,1,0], [1,1,0]] 输出&#xff1a;13 解释&#xff1a; 有 6 个 1x1 的矩形。 有 2 个 1x2 的矩形。 有 3…

学plc好还是python好_PLC是学西门子的好还是学三菱的?

有人回复的很经典&#xff1a;“小孩子才会选择&#xff0c;大人肯定是都要。”如果你是学生&#xff0c;或者正准备踏入这个行业&#xff0c;建议你先学西门子的博途&#xff0c;毕竟这个在国内用的人多些。但是&#xff0c;你要时刻记得&#xff0c;你的目标是星辰大海~~~不要…

wps如何自己制作流程图_怎么制作流程图,wps自动生成流程图方法

在职场中我们要会熟练使用各种办公软件&#xff0c;才能提高我们的工作效率&#xff0c;下面我为大家分享三种制作流程图的方法&#xff0c;非常简单哦&#xff01;一&#xff0c;在Word中制作流程图1&#xff0c;首先点击“插入”再点击“形状”,点击新建绘图画布&#xff0c;…

doom 源码_Cartpole和Doom的策略梯度简介

doom 源码by Thomas Simonini通过托马斯西蒙尼(Thomas Simonini) Cartpole和Doom的策略梯度简介 (An introduction to Policy Gradients with Cartpole and Doom) This article is part of Deep Reinforcement Learning Course with Tensorflow ?️. Check the syllabus here…

SQL 邮件配置篇

在我们运维工作中&#xff0c;经常要对备份&#xff0c;ETL等作业进行监控&#xff0c;这时我们需要用到SQL SERVER自带的邮件服务器&#xff0c;其原理&#xff0c;我在这么里不多说&#xff0c;直接来实战&#xff0c;下面是我对服务器配置源码&#xff0c;分享给大家&#x…

选定用户与用户组启动流程(学习笔记)

public class RepostoryServiceTest {private static final Logger LOGGER LoggerFactory.getLogger(RepostoryServiceTest.class);Rulepublic ActivitiRule activitiRule new ActivitiRule();Testpublic void testRepository(){//repositoryService最重要的功能就是对流程定…

python关于包的题怎么做_Python自定义包引入

python中的Module是比较重要的概念。常见的情况是&#xff0c;事先写好一个.py文 件&#xff0c;在另一个文件中需要import时&#xff0c;将事先写好的.py文件拷贝 到当前目录&#xff0c;或者是在中增加事先写好的.py文件所在的目录&#xff0c;然后import。这样的做法&#x…

汽车之家的安全框架,是如何从0到1搭建的?

“别人家的安全”是安全威胁情报&#xff08;微信ID&#xff1a;Threatbook&#xff09;近期推出的一档专栏。 合规、管理、构建、应急……安全问题千千万&#xff0c;层出不穷。我们没办法给出这些问题的标准答案&#xff0c;但我们可以用Case Study的形式&#xff0c;让你看看…

leetcode264. 丑数 II

编写一个程序&#xff0c;找出第 n 个丑数。 丑数就是质因数只包含 2, 3, 5 的正整数。 示例: 输入: n 10 输出: 12 解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。 说明: 1 是丑数。 n 不超过1690。 解题思路 直接用treeset去重和排序 代码 class Solution …

vr多人_如何构建多人VR网络应用

vr多人by Srushtika Neelakantam通过Srushtika Neelakantam 如何构建多人VR网络应用 (How to build a multiplayer VR web app) In this article, we’ll learn about three great frameworks/libraries that allow any web developer to build a VR app that works on any de…

量子测量 -- 确定性的死神

一、测量 -- 确定性的死神 前文已反复提及在量子世界中测量这一过程会产生很多奇异的、反直觉的现象。在第一篇文章中我举的例子是&#xff1a;用同样的配方&#xff0c;同样的火候&#xff0c;同样的厨具&#xff08;所有你能想到的变量均相同&#xff09;煎鸡蛋&#xff0c;结…

python增删改查csv文件_Python--作业2--对员工信息文件,实现增删改查操作

#!/usr/bin/env python#-*- coding:utf-8 -*-#Author:Huanglinshengimportos#查询方式一&#xff1a;select * from data_staff.txt where age > 22#查询方式二&#xff1a;select * from data_staff.txt where dept "IT"#查询方式三&#xff1a;select * from d…