2016-09-27 1 views
0

날짜가 포함 된 모든 변수를 선택하고 특정 형식을 적용하려면 어떻게해야합니까? 나는 그들의 이름이나 번호를 미리 알지 못한다. 날짜 특별한 변수 참조가 숫자 또는 CHARACTER 또는 ALL로 존재하지 않지만이 의사 같은모든 날짜 변수를 동일하게 포맷하십시오.

뭔가.

DATA test; 
    date1 = '31DEC2015'; 
    name = "names"; 
    first_n = "charge"; 
    anotherdate = 1000; 
    result = 34.2; 
    again_dates = 1001; 
Run; 

DATA test2; 
    set test1; 
    FORMAT _DATES_ date9; 
Run; 

이 가능하지 않은 경우, 다음의 날짜 변수는 모든 이미 예를 들어 ddmmyy10으로 포맷되어 있다고하자 나는 그런 형식으로 모든 변수를 선택하고 date9로 변환하고 싶습니다.

+0

숫자 변수와 날짜를 어떻게 구분 하시겠습니까? 예 : 당신의 예제에서'anotherdate' 또는'again_dates' – superfluous

답변

1

당신이 묻는 더 일반적인 질문에 해답이 있는지 확실하지 않습니다. (적어도 숫자 변수로 숨어있는 가능한 모든 날짜 변수를 잡기 위해 수행 할 수있는 작업을 모르는 경우가 아니면 아마도 몇 가지 명명 규칙이 있습니다). . 그냥 date9에 몇 가지 알려진 형식 중 하나를이 날짜 변수의 불특정 다수를 포맷 할 경우에, 그보다 간단합니다 :

DATA test; 
format anotherdate again_dates date1 ddmmyy10.; 
    date1 = '31DEC2015'; 
    name = "names"; 
    first_n = "charge"; 
    anotherdate = 1000; 
    result = 34.2; 
    again_dates = 1001; 
Run; 


proc contents data = test out = testcntnts; 
run; 

proc sql; 
select NAME into: datevars separated by ' ' from testcntnts where FORMAT = "DDMMYY"; 
quit; 


data test2; 
format &datevars date9.; 
set test; 
run; 
0

당신은 당신의 두 번째 질문을 할 수 있지만 첫 번째. SAS는 날짜를 숫자로 저장하므로 날짜와 정수를 구별 할 수있는 방법이 없습니다.

날짜를 sashelp.vcolumn 또는 proc contents에서 ddmmyy 형식으로 필터링 할 수 있습니다. 그런 다음 proc 데이터 집합을 사용하여 이러한 변경 내용을 적용합니다. proc 데이터 세트를 사용할 때 장점은 데이터 세트를 다시 처리하지 않는다는 것입니다.

내가 제안하는 해결책은 Christopher Anderson과 매우 비슷하지만 다른 데이터 소스와 구현이지만 코드는 본질적으로 동일합니다.

관련 문제