資料處理 SAS程式對資料整合

2021-09-23 02:01:38 字數 4469 閱讀 8057

/** 讀入資料,生成sas資料集work.productapurchase 

(work為sas預設的工作邏輯庫,引用其中的資料集時可省略「work.」)**/

data productapurchase;

infile 'e:\data\ch2_productapurchase.csv' delimiter = ',' firstobs=2;

/*delimiter = `,`指明由逗號分隔,firstobs=2指明從第二行開始讀資料*/

informat date yymmdd10.;

/*第乙個變數名為date,輸入格式為sas中的日期格式yymmdd10.,

即4位數年+2位數月+2位數日,年與月之間、月與日之間以「-」分隔*/

informat accountno $3.;

/*第二個變數名為accountno,輸入格式是長度為3的字串*/

informat amount best32.;

/*第三個變數名為amount,輸入格式為sas中的數值格式best32.*/

format date yymmdd10.;

/*第乙個變數date在sas中輸出格式為yymmdd10.*/

format accountno $3.;

/*第二個變數accountno在sas中輸出格式是長度為3的字串*/

format amount best32.;

/*第三個變數amount在sas中輸出格式為best32.*/

input date accountno amount;

/*從檔案中讀取三個變數的具體資料*/

run;

proc print data=productapurchase(obs=5);

run;

/** 讀入資料,生成sas資料集work.productbpurchase **/

data productbpurchase;

infile 'e:\data\ch2_productbpurchase.csv' delimiter = ',' firstobs=2;

informat date yymmdd10.;

informat accountno $3.;

informat amount best32.;

format date yymmdd10.;

format accountno $3.;

format amount best32.;

input date accountno amount;

run;

proc print data=productbpurchase(obs=5);

run;

/** 讀入資料,生成sas資料集work.demographics**/

data demographics;

infile 'e:\data\ch2_demographics.csv' delimiter =',' firstobs=2;

informat accountno $3.;

informat age best32.;

informat gender $1.;

format accountno $3.;

format age best32.;

format gender $1.;

input accountno age gender;

run;

proc print data=demographics(obs=5);

run;

/**將sas資料集work.productapurchase按客戶號accountno的公升序排列**/

proc sort data=productapurchase;

by accountno;

run;

/**計算各客戶在1月份消費部門a產品的次數和總金額**/

proc sql;

/*sas中可使用sql語句處理資料和進行資料檢索*/

create table tempa_06_01 as

/*產生資料集work.tempa_06_01*/

select accountno, count(*) as count_transa_06_01,

sum(amount) as amount_transa_06_01

from productapurchase

where date

group by accountno

order by accountno;

/*從productapurchase資料集中選出日期2月1日之前的資料,

按照客戶號分組分別計算出三個變數放入work.tempa_06_01,

並按照客戶號的公升序排列:

accountno直接來自於productapurchase,

count_transa_06_01為觀測的數目,

amount_transa_06_01為amount變數的和。

注意:sql語句中的「group by accountno」要求資料集productapurchase

按照accountno的公升序排列,所以前面使用了sort過程*/

quit;

proc print data=tempa_06_01(obs=5);

run;

/**計算各客戶在2月份消費部門a產品的次數和總金額**/

proc sql;

create table tempa_06_02 as

select accountno, count(*) as count_transa_06_02,

sum(amount) as amount_transa_06_02

from productapurchase

where date>='01feb06'd

group by accountno

order by accountno;

quit;

proc print data=tempa_06_02(obs=5);

run;

/**將sas資料集work.productbpurchase按客戶號accountno的公升序排列**/

proc sort data=productbpurchase;

by accountno;

run;

proc print data=productbpurchase(obs=5);

run;

/**計算各客戶在1月份消費部門b產品的次數和總金額**/

proc sql;

create table tempb_06_01 as

select accountno, count(*) as count_transb_06_01,

sum(amount) as amount_transb_06_01

from productbpurchase

where date

group by accountno

order by accountno;

quit;

proc print data=tempb_06_01(obs=5);

run;

/**計算各客戶在2月份消費部門b產品的次數和總金額**/

proc sql;

create table tempb_06_02 as

select accountno, count(*) as count_transb_06_02,

sum(amount) as amount_transb_06_02

from productbpurchase

where date>='01feb06'd

group by accountno

order by accountno;

quit;

/**將sas資料集work.demographics按客戶號accountno的公升序排列**/

proc sort data=demographics;

by accountno;

run;

/**將客戶背景資訊和前面計算出的消費資訊合併成乙個資料集**/

data demoproducts;

/*合併後的資料集是work.demoproducts*/

merge demographics tempa_06_01 tempa_06_02 tempb_06_01 tempb_06_02;

by accountno;

/*將五個資料集按照客戶號accountno合併在一起。

注意:合併時「by accountno」要求各資料集按照accountno的公升序排列,

所以前面使用了sort過程排列work.demographics資料集*/

SAS對資料變數的處理

在使用data步基於已經存在的資料集生成新資料集時,可以指定在新資料集中不需要包含的變數而僅讀取其他變數,或者指定僅需要在 新資料集中包含的變數。該功能可以通過data步中的set語句和資料集選項keep 和drop 來實現,也可以通過keep和drop語句來實現。使用資料集選項keep 和drop...

資料處理取對數的作用

對資料做一些變換的目的是它能夠讓它符合我們所做的假設,使我們能夠在已有理論上對其分析。對數變換 log transformation 是特殊的一種資料變換方式,它可以將一類我們理論上未解決的模型問題轉化為已經解決的問題。我將說兩模擬較有代表性的模型。這句話交代了假設,也就是說,數學模型在實際問題的應...

資料處理使用對數的原因

1.對數函式影象 2.平時在一些資料處理中,經常會把原始資料取對數後進一步處理。之所以這樣做是基於對數函式在其定義域內是單調增函式,取對數後不會改變資料的相對關係,取對數作用主要有 1 縮小資料的絕對數值,方便計算。例如,每個資料項的值都很大,許多這樣的值進行計算可能對超過常用資料型別的取值範圍,這...