91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

sas導入外部數據文件

發布時間:2020-06-24 09:07:14 來源:網絡 閱讀:1853 作者:jackwxh 欄目:開發技術

1.設在路徑:c:"books"learning下有文本文件mydata.txt,其數據以空格格開,形式如下:

M 50 68 155
F 23 60 101
M 65 72 220
F 35 65 133
M 15 71 166

讀入SAS的代碼如下:

data demographics;
infile 'c:"books"learning"mydata.txt';
input Gender $ Age Height Weight;
run;

符號$ 表示變量Gender為一字符型變量。為了檢查讀入文件是否正確,可以通過Print過程察看其觀測值。

title "Listing of data set DEMOGRAPHICS";
proc print data=demographics;
run;

若源文件中的數據有缺失值怎么辦?比如說mydata.txt的數據內容如下

M 50 68 155
F 60 101
M 65 72 220
F 35 65 133
M 15 71 166

當SAS讀到第二行時,會以60代表年齡,101代表身高。接下來會以下一行M代表體重,而M是一字符型變量。叮當,SAS在Log中報錯了。正確的方式為,以 . 代表缺失值。如下圖

M 50 68 155
F  .    60 101
M 65 72 220
F 35 65 133
M 15 71 166

2.讀入CSV格式文件。

無需廢話,看代碼

data demographics;
infile 'c:"books"learning"mydata.csv' dsd;
input Gender $ Age Height Weight;
run;

DSD(delimiter-sensitive data)有幾個作用。其一,表明以逗號分隔數據;其二,在一行中若有兩個逗號,表明在中間有一個缺失值;其三,若字符型變量置有引號,則可以去掉其引號。上述代碼的另一種形式為

filename preston 'c:"books"learning"mydata.csv';
data demographics;
infile preston dsd;
input Gender $ Age Height Weight;
run;

變量demographics是實際文件名字的別名。

如果csv格式文件不是以逗號分隔開,怎么辦?例如下述文件以冒號分隔數據

M:50:68:155
F:23:60:101
M:65:72:220
F:35:65:133
M:15:71:166

讀入此文件時,使用下述形式

infile 'file-description' dlm=':' ;或者infile 'file-description' delimiter=':';

如果數據是以TAB隔開呢?事情有點麻煩,但還在控制中。此時以十六進制字符代表TAB,例如

對于ASCII文件,infile 'file-description' dlm='09'x;

對于EBCDIC文件,infile 'file-description' dlm='05'x;

3.讀入固定列--方式1:列輸入

許多數據是以固定列(fixed columns)的形式保存在文件中。讀入此種文件可以列輸入(column input)的方式讀入。這種方法可以讀入字符型變量,格式化數字。格式化數字,不僅是正負形式的數據,還有指數形式的數值。比方說3.4E3表示3.4*10^3.

假設有如下形式的數據,保存在bank.txt中。

00110/21/1955M 1145
00211/18/2001F 18722
00305/07/1944M 123.45
00407/25/1945F -12345

沒有任何分隔符。怎么辦,看代碼

data financial;
infile 'c:"books"learning"bank.txt';
input Subj $ 1-3
      DOB $ 4-13
     Gender $ 14
      Balance 15-21;
run;

方式2.格式化輸入(Formatted input)

當數據是非標準化形式存放時,就應當考慮格式化輸入方法了。還是以上面的例子為例,格式化輸入的代碼為

data financial;
infile 'c:"books"learning"bank.txt';
input @1 Subj $3.
       @4 DOB mmddyy10.
       @14 Gender $1.
       @15 Balance 7.;
run;

符號@稱為列指針(Column Pointer),@4就是告訴SAS,指到第4列。有兩種格式化形式,w.d和$w。w告訴SAS有幾列數據需要讀取,d表示小數點在其值的位置。例如,以3.0形式讀入123,SAS會保存為123.0,對同一數字以3.1讀入,SAS會保存為12.3.如果需讀入的數字本身有小數點,則d將會被忽略。如以4.1的形式讀入1.23,SAS仍會保存為1.23.而$w表示將讀入w列數據。

需要讀入日期數據時,MMDDYY10.告訴SAS以mm/dd//yyyy的形式讀入日期,SAS會以1960年1月1日為起始日到此日期的天數保存。所以,如果讀入01/01/1960,SAS會保存為0.

執行上述代碼后,顯示的數據為

Obs      Subj     DOB     Gender      Balance     
1      001     -1533     M     1145.00     
2      002     15297     F     18722.00     
3      003     -5717     M     123.45     
4      004     -5273     F     -12345.00     

此時生日均被顯示為離1960年1月1日的天數。如果想以常規形式顯示,將日期重新進行格式化輸出

title "Listing of FINANCIAL";
proc print data=financial;
format DOB mmddyy10.
         Balance dollar11.2;
run;

結果顯示為

Listing of FINANCIAL
Obs Subj DOB Gender Balance
1 001 10/21/1955 M $1,145.00
2 002 11/18/2001 F $18,722.00
3 003 05/07/1944 M $123.45
4 004 07/25/1945 F $-12,345.00

4.使用Format表達式

假設有一份文件,其數據被空格或逗號隔開,字符長大于8字節。讀入時,在Input表達式中緊隨變量名后,附上格式形式。中間以冒號隔開。

例如,設有一份CSV文檔,其內容如下

"001","Christopher Mullens",11/12/1955,"$45,200"
"002","Michelle Kwo",9/12/1955,"$78,123"
"003","Roger W. McDonald",1/1/1960,"$107,200"

看代碼:

data list_example;
infile 'c:"books"learning"list.csv' dsd;
input Subj   : $3.
       Name  : $20.
       DOB   : mmddyy10.
       Salary : dollar8.;
format DOB date9. Salary dollar8.;
run;

另外一種使用Informat表達式的讀入數據形式,是顯式地使用Informat.上述讀入代碼可以為

data list_example;
informat Subj $3.
           Name $20.
           DOB mmddyy10.
           Salary dollar8.;
infile 'c:"books"learning"list.csv' dsd;
input Subj
       Name
       DOB
       Salary;
format DOB date9. Salary dollar8.;
run;

如果前述CSV文件中的數據是以空格隔開,且字符沒有引號。例如

001 Christopher Mullens 11/12/1955 $45,200
002 Michelle Kwo 9/12/1955 $78,123
003 Roger W. McDonald 1/1/1960 $107,200

問題就來了。名字中的空格會使用SAS以為變量已結束,導致讀入不正確。

問題的解決之道在于以&代替冒號:,讀入的代碼為

data list_example;
infile 'c:"books"learning"list.txt';
input Subj  : $3.
     Name  & $20.
     DOB   : mmddyy10.
     Salary : dollar8.;
format DOB date9. Salary dollar8.;
run;

  • 0


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

剑阁县| 常山县| 山西省| 黔南| 永州市| 垣曲县| 长岛县| 郴州市| 彰化市| 石门县| 潢川县| 海口市| 鄢陵县| 建平县| 唐海县| 玛曲县| 五莲县| 康平县| 昭通市| 德州市| 清徐县| 莱州市| 礼泉县| 垦利县| 荆州市| 镇坪县| 盐池县| 庆安县| 南城县| 建德市| 灵宝市| 南安市| 托里县| 邛崃市| 衢州市| 泽库县| 高要市| 怀远县| 天等县| 柳林县| 当阳市|