각 필드를 가져 오기없이 가져 오지 않고도 CSV 파일을 SAS 데이터 세트로 읽는 데 문제가 있습니다. 나는 모든 필드를 수입하는 것을 원하지 않지만, 이것이 작동하도록하는 유일한 방법이다. 문제는 SAS가 열을 올바르게 읽는다고해도 SAS가 데이터를 올바르게 읽을 수 없다는 것입니다 ... 문제의 일부는 내가 읽지 않으려는 실제 열 헤더보다 위에있는 것입니다.SAS - Raw/Delimited 파일 읽기
내 데이터가 너무
somevalue somevalue somevalue...
var1 var2 var3 var4
abc abc abc abc
내가 someValue와를 제외 할 경우에만 선택 VAR의 및 해당 데이터를 읽어처럼 뻗어있다.
다음은 필자의 입력란에있는 모든 값을 스크램블 한 샘플 파일입니다. 난 단지, AT (46) 열 H (8)을 유지하고 싶은 (57)
여기
... 내가 지금까지 시도했습니다 몇 가지 코드의이 SAS는 PROC의 수입에서 발생했다. 내 PROC 가져 오기 필드 값을 읽을 잘 작동했기 때문에 내가 원하지 않는 필드를 삭제했지만 예상 한 출력을 얻지 못합니다. 필드에 해당하는 값이 일치하지 않습니다.
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;
(내가 원하는하지 않은 다른 필드를 잘라) ... 난 그냥 누락 생각
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;
: 뭔가 ..
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 포인트를하려고 수정로
어느 것도 작동하지 않습니다. 다시 말하지만, 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