有没有办法在SAS中搜索包含特定字符串的标题,然后对所有标题应用格式更改

有没有办法在SAS中搜索包含特定字符串的标题,然后对所有标题应用格式更改,sas,Sas,假设我有标题NAME(char32)、BIRTH\u DATE(best32)和APPLICATION\u DATE(best32)。是否有方法使用proc过程搜索包含“\u DATE”的所有标题,然后更改所有结果的格式。因此,在这种情况下,我们将以NAME(char32)、BIRTH\u DATE(date9)和APPLICATION\u DATE(date9)解决这个问题的方法很多。下面的方法使用PROC SQL中的DICTIONARY.COLUMNS视图来获取所需的列。它构造了一个宏变量,

假设我有标题
NAME
(char32)、
BIRTH\u DATE
(best32)和
APPLICATION\u DATE
(best32)。是否有方法使用
proc
过程搜索包含“\u DATE”的所有标题,然后更改所有结果的格式。因此,在这种情况下,我们将以
NAME
(char32)、
BIRTH\u DATE
(date9)和
APPLICATION\u DATE
(date9)

解决这个问题的方法很多。下面的方法使用PROC SQL中的DICTIONARY.COLUMNS视图来获取所需的列。它构造了一个宏变量,可以在PROC数据集中使用它来更改格式

data have;
format name $32. birth_date application_date best32.;
name = "x";
birth_date = "04JUL1776"d;
application_Date = today();
run;


proc sql noprint;
select name into :tochange separated by " date9. "
from dictionary.columns
where libname="WORK"
  and memname="HAVE"
  and upcase(name) like '%_DATE';
quit;

%put &tochange;

proc datasets lib=work nolist;
modify have;
    format &tochange date9.;
run;
quit;

proc print data=have;
run;

日期值是SAS日期值还是类似20141006的值表示2014年10月6日?或20002,应用的格式为2014年10月6日?@Reese他们被假定为SAS日期值或null。对SAS来说相对较新。什么是
libname
memname
值,它们是否表示导入的数据位置?还有什么是
%put&tochange正在做什么?这是一个临时变量,用于跟踪从sql搜索中提取的所有列。打开sashelp.vcolumn表,与dictionary.column表相同,您将更好地了解发生了什么。@Reese,没错。LIBNAME是数据表所在的库名称(upcased)。MEMNAME是数据表的名称<代码>%put&tochange
只是将&tochange宏变量中包含的值打印到日志中。