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.pswp.cn/news/394341.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394341.shtml
英文地址,請注明出處:http://en.pswp.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…