2016-09-27 41 views
0

如何选择包含日期的所有变量并将特定格式应用于它们?我不知道他们的名字或者他们的号码。格式化所有日期变量相同

事情是这样的伪代码,虽然DATES特殊的变量引用不存在作为NUMERICCHARACTERALL

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内容过滤ddmmyy格式的日期,然后使用proc数据集应用这些更改。使用proc数据集的优点是您不需要重新处理数据集。

我建议的解决方案非常接近Christopher Anderson,但数据源和实现不同,但代码基本相同。