新建文件夾
%sysexec md "G:\EC\KIE&month" & exit;
/***********************new folder*****************************************/
%let day=20991231;
data a;
newdirectory=dcreate(strip("&day."),"X:\BOBJ\Source\CACR\D16SRC");
newdirectory=dcreate(strip("&day."),"X:\BOBJ\Source\CACR\D16DB");
newdirectory=dcreate(strip("&day."),"X:\BOBJ\Source\CACR\DLM");
run;
記錄日志
DM 'LOG;log;FILE "P:\EC\data_summary\&month\summary.log" append;';
/*****output log***/
dm 'LOG;file" C:\archive\mylog.log "';
/*****only output log to file***/
proc printto
log="C:\archive\mylog.log" new;
run;
/*********************** import & EXPORT (dde)**********************************/
dde export
%macro dde(excel=,sheet=,data=,r1=,r2=,c1=,c2=,out=);
filename dde_out dde "Excel|[&excel..xlsb]&sheet!R&r1.C&c1.:R&r2.C&c2." notab lrecl=2048;
data _null_;
set &data.;
file dde_out dsd dlm='09'x ;
put &out;
run;
%mend;
%dde(excel=Channel Dashboard template_CN, sheet=Channels vs Txn Types, data=channel.channel_all_fin, r1=7,r2=22,c1=3,c2=10,out=Internet ATMON ATMOFF ATM Branch IVR Contact_Centre SMS);
%Macro Exl2DS(ExlFile=,outdat=,dbms=,getnames=,textsize=,sheet=);
Proc import dbms = &dbms out = &outdat datafile = &ExlFile replace;
getnames = &getnames; /*導入源文件字段名作為SAS數據集的字段名*/
scantext = Yes; /*將源文件中各列值的最長長度作為該列在SAS中的字段長度。*/
usedate = Yes; /*對于包含日期字段的源文件字段,在SAS中只保留DATE值,并以DATE.格式存儲。*/
scantime = Yes; /*對于源文件中只有time值的列,自動以時間格式(TIME)存儲*/
mixed = Yes; /*若某一列中包含數值型和字符型變量,將數值型按照缺省值處理。若選的是YES則是將數值型轉換成字符型存儲,默認為NO*/
textsize = &textsize; /*源文件每一個單元格長度最大值*/
sheet = "&sheet.";
Run;
%mend Exl2DS;
%Macro DS2Exl(indat=,ExlFile=,sheet=);
PROC EXPORT DATA= &indat.
OUTFILE= &ExlFile.
DBMS=EXCEL2000 REPLACE;
SHEET=&sheet.;
run;
%Mend;
Proc Import:
datafile:要導入的文件
out:輸出的數據集
dbms:文件類型,可以是tab csv dlm excel2000等等
replace:是否替換已經存在的數據集
三個子句(其中delimiter只針對dbms=dlm的情況):
delimiter:制定分隔符
getnames:是否從文件首行讀入變量名
datarow:從那一行開始讀入數據
如:
proc import datafile='c:\test.csv' out=test dbms=dlm replace;
delimiter=',';
getnames=no;
datarow=2;
run;
proc export data= work.X_SELL_&day2.
outfile= "X:\SAS_report\1401224\Monthly_013_CC_X_sell_report\Report\X_SELL_&day2..csv"
dbms=CSV replace;
run;
用SAS讀取外部數據(用data步導入自由格式的外部數據)
Data 數據集名;
Infile "路徑\表名" DLM=’characters’ <missover><firstobs=x>;
Input <@k> var1:定義的變量為字符型。
? Format:定義變量格式。
? M-n:讀取m-n位。
? @:停頓符。
? @@:繼續讀取。
? /:換行符。
? DSD選項
注:
? 以從左到右的順序讀取數據。
? 所有變量默認長度為8位,如讀入數據超出8位,需在之前定義
例如:
data profile;
infile "E:\Vichy\Vichy_Profile.csv" delimiter=',' dsd missover firstobs=2;
format CustomerID $50. Gender $11. Mobile_Phone $20. ;
input CustomerID $ Gender $ Mobile_Phone $ age;
run;
- 導出CSV:
proc export data=result
outfile='D:\Lancome_ec\報表\sampler.csv' dbms=csv replace;
run;
- 導入CSV:
%macro importcsv(dataset,path);
proc import datafile=&path out=&dataset;run;
%mend;
%importcsv(dataset=listwave,path="D:\Lancome_ec\報表\listwave.csv");
- 導入excel:
方法1:
PROC IMPORT OUT= WORK.recommend_rule
DATAFILE= "E:\EC\kie\ff-test\recommend_rule.xlsx"
DBMS=EXCEL REPLACE;
SHEET="Sheet1$";
GETNAMES=YES; /*指出第一行是否有字段名*/
MIXED=YES;/*同時讀入同一字段的字符型和數值型變量*/
SCANTEXT=YES;/*會自動掃描,以最大的寬度作為改列字符變量的寬度。如果SCANTEXT=NO,則在不設定TEXTSIZE的情況下,默認長度為255。*/
RUN;
方法2:
libname lr "E:\Vichy\NPS_Mobile\薇姿1004_1010.xlsx";
data nps_hcr;set lr."sheet1$"n;run;
libname lr clear;
- 導出excel:
方法1:
PROC EXPORT DATA=&input
OUTFILE= "E:\EC\kie\ff-test\result\&output..xls"
DBMS=EXCEL REPLACE label;
SHEET="sheet1";
RUN;
方法2:
libname lib excel "C:\Users\eve\Desktop\test\time_test.xlsx";
proc datasets lib=lib kill;run;
data lib.sheet1(dblabel=YES);set time;run;
libname lib clear;
/****************excel多表導出在同一工作簿中***************/
方法1:
%macro report(input,output);
PROC EXPORT DATA=&input
OUTFILE= "E:\EC\kie\ff-test\定期項目\TMALL先試后買\Review\review&EC_date..xlsx"
DBMS=EXCEL REPLACE label;
SHEET="&output.";
RUN;
%mend;
%report(S2p_p2,先試后買推薦結果);
%report(P2p_p2,正裝推薦結果);
%report(Productnum,正裝回購人數);
%report(Samplenum,先試后買回購人數);
%report(p_time,正裝回購參考日期);
%report(s_time,先試后買回購參考日期);
方法2:
libname xlout excel "E:\EC\kie\ff-test\定期項目\TMALL先試后買\Review\review&EC_date..xlsx";
proc datasets lib=xlout kill;run;
data xlout.先試后買推薦結果;set S2p_p2;run;
data xlout.正裝推薦結果;set P2p_p2;run;
data xlout.正裝回購人數;set Productnum;run;
data xlout.先試后買回購人數;set Samplenum;run;
data xlout.正裝回購參考日期;set p_time;run;
data xlout.先試后買回購參考日期(dblabel=yes);set s_time;run;/*輸出標簽*/
libname xlout clear;
/********************************************************************/
- 輸出由freq出的類別的頻數和百分比構成的表
ods csv file="G:\EC\KIE\online datamart\&date\datamart_對比.csv";
/*輸出datamart_對比表,總表中control和test包括以下6個量*/
proc freq data=t_test;table cluster;run;
proc freq data=c_control;table cluster;run;
proc freq data=t_test;table auscat;run;
proc freq data=c_control;table auscat;run;
proc freq data=t_test;table Frequency_online;run;
proc freq data=c_control;table Frequency_online;run;
ods csv close;
/***************導入外呼名單excel***************/
%let output=calllist;
%let path="E:\Vichy\Vichy Report\M89.xlsx";
%let sheet="data$"n;
%macro importexcel(dataset,sheet,path);
proc import
out=&dataset datafile=&path dbms=excel replace;
sheet=&sheet;
GETNAMES=YES;
MIXED=YES;
SCANTEXT=YES;
USEDATE=NO;/* 使用日期格式變量*/
SCANTIME=YES;
RUN;
%mend;
%importexcel(dataset=&output,sheet=&sheet,path=&path);
/**********讀取外部原始數據**************/
1、讀取TXT文件
data TEMP;
infile '/folders/myfolders/emp_data.txt';
input empID empName $ Salary Dept $ DOJ date9. ;
format DOJ date9.;
run;
PROC PRINT DATA=TEMP;
RUN;
2、讀取CSV文件
data TEMP;
infile '/folders/myfolders/emp.csv' dlm=",";
input empID empName $ Salary Dept $ DOJ date9. ;
format DOJ date9.;
run;
PROC PRINT DATA=TEMP;
RUN;
3、讀取Excel文件
FILENAME REFFILE
"/folders/myfolders/TutorialsPoint/emp.xls"
TERMSTR=CR;
PROC IMPORT DATAFILE=REFFILE
DBMS=XLS
OUT=WORK.IMPORT;
GETNAMES=YES;
RUN;
PROC PRINT DATA=WORK.IMPORT RUN;