SAS中文论坛

标题: 如何DATASET 中的小写的变量名字全部变成大写 [打印本页]

作者: shiyiming    时间: 2011-2-15 12:02
标题: 如何DATASET 中的小写的变量名字全部变成大写
一个目录里面有很多的DATASET,每个数据集中既有大写的变量名,还有小写的变量名字。现在我想把这个目录下的数据集中的所有小写的变量名字变成大写,请问该如何处理。
作者: shiyiming    时间: 2011-2-16 07:09
标题: Re: 如何DATASET 中的小写的变量名字全部变成大写
[code:sva45j9r]**assume having loaded the directory into library of 'yourLib';
**SAVE your original data sets first;

%let libName_ =yourLib;
proc sql noprint;
                create table work._t        as select memName,  upcase(name) as name_u from dictionary.columns where libname="%upcase(&libName_)";
                select count(*) into :totalV from work._t; %put &totalV;  
     select memName,  name_u into :mem1-:mem%left(&totalV),  :var1-:var%left(&totalV) from work._t;          
quit;
%macro Covert2Ucase(xx);
        %let listV =;
        %do i =1 %to &totalV;
                %if &xx =&&mem&i %then %let listV =&listV &&var&i;
         %end;
        data &libName_..&xx;
                retain &listV; set &libName_..&xx;
%mend Covert2Ucase;
data _null_;
        set work._t(keep =MEMname); by memName notsorted;
        if first. memName then call execute('%Covert2Ucase('||memName||')'); run;
run;[/code:sva45j9r]

***JingJu
作者: shiyiming    时间: 2011-2-16 14:03
标题: Re: 如何DATASET 中的小写的变量名字全部变成大写
[code:2qgydhl6]data raw;
    input id $ var1 $ var2 $;
datalines;
a1 11 12
a2 21 22
;

proc sql;
    select  compbl(name||' as '||upcase(name)) into :inputstr separated by ','
    from sashelp.vcolumn
    where libname='WORK' and memname='RAW'  ;
    create table final as
    select &inputstr
    from raw
    ;[/code:2qgydhl6]
作者: shiyiming    时间: 2011-2-16 17:54
标题: Re: 如何DATASET 中的小写的变量名字全部变成大写
借用huige的方法,对大数据应该快一点
[code:smiawn64]data raw;
  do i=1 to 1000000;
    id=i;
    var1=i*i;
    var2=i*8;
    output;
  end;
;

/*方法2:*/
proc sql noprint;
    select  compbl(name||' = '||upcase(name)) into :inputstr separated by ' '
    from sashelp.vcolumn
    where libname='WORK' and memname='RAW'  ;
    ;
quit;

proc datasets lib=work nolist;
  modify raw;
  rename &inputstr;
quit;
[/code:smiawn64]
作者: shiyiming    时间: 2011-2-16 21:45
标题: Re: 如何DATASET 中的小写的变量名字全部变成大写
[code:1hn18clx]%macro Covert2Ucase(xx);
        %let k =0;
        %do i =1 %to &totalV;         
                %if (&xx =&&mem&i) and(&&var&i ^=%upcase(&&var&i)) %then%do;
                        %let k =%eval(&k +1);
                        %if &k =1 %then%do;
                                modify &xx; rename
                        %end;
                        &&var&i =%upcase(&&var&i) %end;
         %end;;
%mend Covert2Ucase;
data _null_;
        set work._t(keep =MEMname) end =Eof; by memName notsorted;
        if _n_ =1 then call execute('proc datasets library =&libname_ nolist;');
        if first. memName then call execute('%Covert2Ucase('||memName||')');
        if Eof then call execute('quit;');
run;[/code:1hn18clx]
如果library含有大的数据集。如楼上而言,datasets应该更好。京剧
作者: shiyiming    时间: 2011-2-16 22:46
标题: Re: 如何DATASET 中的小写的变量名字全部变成大写
[code:3s5z371q]%let libName_ =yourLib;
proc sql noprint;
                create table work._t        as select memName,  name  from dictionary.columns where libname="%upcase(&libName_)";
quit;
%macro Convert1Ucase(dset); modify &dset;               %mend Convert1Ucase;
%macro Convert2Ucase(var);  rename &var =%upcase(&var); %mend Convert2Ucase;
data _null_;
        set work._t end =Eof; by memName notsorted;
        if _n_ =1                    then call execute('proc datasets library =&libname_ nolist;');       
   if first. memName            then call execute('%Convert1Ucase('||memName||')');
        if name ~=upcase(name)       then call execute('%Convert2Ucase('||name||')');
        if Eof                       then call execute('quit;');
run;[/code:3s5z371q]
细想此处创造macro 变量列表好像意义很小。故此改正。京剧
作者: shiyiming    时间: 2011-2-16 22:53
标题: Re: 如何DATASET 中的小写的变量名字全部变成大写
jingju的程序风格思路很值得学习

我最近把一小块需要经常改动的地方放到txt里面直接用include调用
作者: shiyiming    时间: 2011-2-23 12:18
标题: Re: 如何DATASET 中的小写的变量名字全部变成大写
各位大神的杰作,已拜读!非常的感谢!
作者: shiyiming    时间: 2011-2-23 14:20
标题: Re: 如何DATASET 中的小写的变量名字全部变成大写
哦。。。-,- 原来上面几位都是版主。。




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2