上篇学习了check数据集里超过200个字符变量,接下来就是分割这些变量为xx,xx1,xx2……
这里的思路是:首先算出来这个变量最大的长度是多少,通过计算出需要分割为多少个变量。然后再利用循环将这些变量逐一读取200个字符出来。这里用到ktruncate函数,这个函数的作用是“在不破坏多字节字符的情况下将字符串截断为指定长度(以字节为单位)。”
下面简单举个例子,提供编程思路:
%macro spilt(dsin=,var=,dsout=);
/*计算最大需要拆分为多少个变量*/
proc sql noprint;
select ceil(max(length(&var.))/200) into :maxn from &dsin.;
quit;
data &dsout.;
length &var &var.1-&var.%eval(&maxn.-1) $200.;
set &dsin.(rename=(&var.=_&var.));
array var[&maxn.] &var &var.1-&var.%eval(&maxn.-1);
star=1;
%do i = 1 %to &maxn.;
retain star;
var[&i.] = ktruncate(_&var., star, 200);
star=star+length(strip(var[&i.]));
%end;
run;
%mend;
做个测试:
data aa;
aa="数组的使用可以大大简化代码,特别是在处理大型数据集时。您可以在一个循环中访问数组的多个元素,并对它们执行相同的操作,从而提高代码的可读性和效率。请注意,这里提供的代码仅作为示例,具体情况可能会有所不同,需要根据实际需求进行调整。如果您有更具体的问题或需求,请随时提出。我们会解决";output;
run;
%spilt(dsin=aa,var=aa,dsout=a1);