2013-07-31 4 views
1

나는 네 개의 쉼표 파일 구분이 있습니다 mar2009.txt, mar2010.txt, mar2011.txt 및 mar2012.txtSAS에서 데이터 세트를 동적으로 삭제하고 가져 오는 방법은 무엇입니까?

내 도서관을 정화하고 동적으로 그 데이터 세트를 가져 오기 위해 노력하고 있어요 :

libname my "C:\Users\Owner\Desktop\SAS\"; 

data A; // I do not this step but if I do not use it the the "do" becomes red in color 
do i = 2009 to 2012; 

proc datasets library=my; 
delete mar.&i; 
run; 

proc import out=my.mar.&i datafile="C:\Users\Owner\Desktop\SAS\mar.&i.txt" dbms=dlm replace; 
delimiter='2c'x; 
getnames=yes; 
datarow=2; 
run; 

end; 
run; 
+0

잘못된 방식으로 사용하지 마십시오. 실제로 Little SAS Book과 같은 시작 SAS 책을 읽어야합니다. 매우 기초적인 수준에서 전혀 의미가없는 것들을 여기서 섞어 쓰고 있습니다. – Joe

+0

first - 오픈 코드에서 do 문을 사용할 수 없습니다. 찾고있는 것은 매크로 내에서 % do를 사용하는 것입니다. 나는 Joe와 동의하거나 독서를하거나 온라인 문서를 살펴 본다. – scott

답변

2

하면 대답하기를 근본적인 수준에서 질문을하면, 다시 가져 오기 때문에 데이터 세트를 "정리"할 필요가 없습니다. 자동으로 교체됩니다.

%macro import_myfile(i=); 
proc import file="...whatever...\mar&i.txt" out=mar_&i. dlm=',' replace; 
run; 
%mend import_myfile; 

%import_myfile(i=2009); 
%import_myfile(i=2010); 
%import_myfile(i=2011); 
%import_myfile(i=2012); 

당신은 2009 년 2012 그것을 실행하는 루프를 작성할 수 있지만, 그것은 단지 4 실행을의 경우는 코드 가치가 없어 :

당신과 같이 가져 오기를 수행하는 매크로를 작성할 수 있습니다. 이 때를 데이터 집합 형태가 아닌 코드에 보관처럼 데이터를 가지고 일반적으로 더

data data_torun; 
input filenum; 
datalines; 
2009 
2010 
2011 
2012 
;;;; 
run; 

proc sql; 
select cats('%import_myfile(i=',filenum,')') into :listtorun 
separated by ' ' 
from data_torun; 
quit; 

&listtorun.; 
*this will become the same four calls as above; 

: 당신이 실행하는 동적 수 있고, 그 값이 데이터 세트에있는 경우, 당신은 이런 식으로 할 수 잠재적으로 변경 될 수 있습니다 (루프 상태에서도). 그런 식으로 텍스트 파일에이 파일을 저장하고 읽을 수 있습니다.

+2

나는 대답에 포함시키지 않은 한 노트 : 필자는 코드 작성에 도움이되는 사람을 제외하고 CSV를위한 proc import를 경멸했다. PROC IMPORT가 아닌 데이터를 입력하는 데이터 단계를 작성하는 것이 데이터의 제어를 훨씬 더 많이하므로 시간이 90 % 나됩니다. – Joe

관련 문제