我在將CSV文件讀入SAS數據集時未遇到導入每個字段的問題。我不希望每個字段都導入,但這是我看起來能夠實現這一目標的唯一方式。問題是我無法正確讀取我的數據,即使它正確地讀取列中的數據......我認爲問題的一部分是,我的數據超出了我的實際列標題,我不想讀取。SAS - 讀取原始/分隔文件
我的數據,像這樣
somevalue somevalue somevalue...
var1 var2 var3 var4
abc abc abc abc
,我想排除someValue中,只有在選擇VAR的和它們對應的數據讀佈局。
下面是一個示例文件,其中我已經對我的字段中的所有值進行了置亂。我只是想保持H列(8),AT(46)和BE(57)
下面是一些代碼到目前爲止,我已經試過......
這是從PROC IMPORT產生SAS。我的PROC IMPORT工作得很好,在每字段值中讀取,所以我剛剛刪除了我不想要的字段,但我沒有得到我期望的輸出。與這些字段對應的值不匹配。
A) PROC IMPORT
DATAFILE="C:\Users\dip1\Desktop\TU_&YYMM._FIN.csv"
OUT=TU_&YYMM._FIN
DBMS=csv REPLACE;
GETNAMES=NO;
DATAROW=3;
RUN;
在SAS日誌中生成的(我切出的其他領域,我不想)
B) DATA TU_&YYMM._FIN_TEST;
infile 'C:\Users\fip1\Desktop\TU_1701_FIN.csv' delimiter = ',' DSD lrecl=32767
firstobs=3 ;
informat VAR8 16. ;
informat VAR46 $1. ;
informat VAR57 $22. ;
format VAR8 16. ;
format VAR46 $1. ;
format VAR57 $22. ;
input
VAR8
VAR46 $
VAR57 $;
run;
我也試過這個下面......我相信我只是缺少東西..
C) DATA TU_TEST;
INFILE "C:\Users\fip1\Desktop\TU_&yymm._fin.csv" DLM = "," TRUNCOVER FIRSTOBS = 3;
LABEL ACCOUNT_NUMBER = "ACCOUNT NUMBER";
LENGTH ACCOUNT_NUMBER $16.
E $1.
REJECTSUBCATEGORY $22.;
INPUT ACCOUNT_NUMBER
E
REJECTSUBCATEGORY;
RUN;
除了想有SAS點我想讀列中,修改上述到:
D) DATA TU_TEST;
INFILE "C:\Users\fip1\Desktop\TU_&yymm._fin.csv" DLM = "," TRUNCOVER FIRSTOBS = 3;
LABEL ACCOUNT_NUMBER = "ACCOUNT NUMBER";
LENGTH ACCOUNT_NUMBER $16.
E $1.
REJECTSUBCATEGORY $22.;
INPUT @8 ACCOUNT_NUMBER
@46 E
@57 REJECTSUBCATEGORY;
RUN;
沒有哪個工作。再一次,如果我把所有的領域都帶進A)或B),我可以成功地做到這一點,因爲B)包括所有的領域,但我不能得到C)或D)的工作,我想如果可以的話,儘量減少代碼。我敢肯定我錯過了一些東西,但我從來沒有時間去鼓搗它,所以我只是一直這樣做的「長」的方式。
這是一個什麼樣的數據看起來像片段
A(1) B(2) C(3) D(4) E(5) F(6) G(7) ABCDEFGHIJ ABCDMCARD 202020 4578917 12345674 457894A (blank) CRA INTERNALID SUBCODE RKEY SEGT FNM FILEDATE CREDITBUR 2ABH123 AB2CHE123 A28O5176688 J2 Name 8974561
啊,我想我明白了這個問題。 SAS正在閱讀變量標題,我的印象是SAS知道字段名稱是「在哪裏」,並且正在盜用它下面的數據。基本上,我在例子C)中做的是改變了我的字段名稱,但保持字段值。我相信你在做什麼是推動輸入緩衝區的位置來讀取適當的值...(可能會被屠殺) – DukeLuke
是否有一個原因,我們有兩個長度語句之間的「虛擬」和我想要的實際領域使用? – DukeLuke
爲了使代碼更具可讀性,我使用了兩條LENGTH語句。我喜歡在一個地方定義表格的變量。 DUMMY變量實際上並不是輸出表的一部分,所以我把它放在一個單獨的語句中。 – Tom