增加变量名称

时间:2015-12-11 23:58:15

标签: sas

是否可以以简单的方式增加不同的前缀变量名称?例如,如果我的数据集中有Score1的列,一直到Score20,我可以这样做:

input Score1-Score20;

但是如果我得分1 Rank1总计1到得分20 Rank20 Total20,有没有办法增加这些而不用手动输入每一个?结果如下:

Score1 Rank1 Total1 Score2 Rank2 Total2 Score3 Rank3 Total3 etc...

3 个答案:

答案 0 :(得分:2)

您是否关心变量是否以与输入文件不同的顺序创建?如果没有,那么使用ARRAY。试试这个例子。

data x ;
  array x(3,20) a1-a20 b1-b20 c1-c20 ;
  infile cards truncover;
  do block=1 to 20;
   do item=1 to 3; 
     input  x(item,block) @; 
   end; 
  end; 
  put (_all_) (=);
  list;
cards;
1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
;

如果您按此顺序需要它们,那么您需要使用某种类型的代码生成。

您可以创建一个简单的函数样式宏来发出名称列表。

%macro namelist(baselist,n);
%local i j;
%do i=1 %to &n ;
%do j=1 %to %sysfunc(countw(&baselist));
  %scan(&baselist,&j)&i
%end;
%end;
%mend namelist;
...
input %namelist(Rank Total Score,20) ;

或者您可以使用简单的数据步骤将列表构建为宏变量。

data _null_;
  length i 8 basename $30 namelist $32000;
  do i=1 to 20 ;
    do basename='Rank ','Total','Score';
       namelist=catx(' ',namelist,cats(basename,i));
    end;
  end;
  call symputx('namelist',namelist);
run;
...
input &namelist ;

答案 1 :(得分:0)

你可以为此做一个宏。我认为这样可行:

%macro mymacro(runs);
   %do i=1 %to &runs;
         input Score&i Rank&i Total&i;
      run;
   %end;
%mend create;
%mymacro(20)

请尝试此处以获得更好的文档:https://support.sas.com/documentation/cdl/en/mcrolref/61885/HTML/default/viewer.htm#a000543755.htm

答案 2 :(得分:0)

本周早些时候在这里提出同样的问题,答案是一样的。

https://communities.sas.com/t5/General-SAS-Programming/Variables-listing/m-p/238350#M34601

您可以创建一个宏来创建名称。

var inputString = 'Showing <span id="results_end">10</span> of <span id="results_total">55</span> items';

var el = document.createElement( 'html' );
el.innerHTML = inputString;

var num = parseInt(el.getElementById( 'results_total' ).innertext);