方法一:使用%SCAN和%SUBSTR宏函数

%macro split_long_char_vars(data); %local i varname varlen; %let i=1; %do %while(%scan(&data.,&i.) ne); %let varname=%scan(&data.,&i.); %let varlen=%length(&varname.); %if &varlen. > 20 %then %do; %let newvar1=%substr(&varname.,1,20); %let newvar2=%substr(&varname.,21); data &data.(drop=&varname.); set &data.; &newvar1. = %substr(&varname.,1,20); &newvar2. = %substr(&varname.,21); run; %end; %let i=%eval(&i.+1); %end; %mend;

%split_long_char_vars(sashelp.class);

方法二:使用ARRAY和DO OVER语句

%macro split_long_char_vars(data); data &data.; set &data.; array char_vars character; %do over char_vars; %if %length(&char_vars.) > 20 %then %do; %let newvar1=%substr(&char_vars.,1,20); %let newvar2=%substr(&char_vars.,21); &newvar1. = %substr(&char_vars.,1,20); &newvar2. = %substr(&char_vars.,21); %end; %end; run; %mend;

%split_long_char_vars(sashelp.class)

你是一名资深SAS程序员请你写一段SAS宏程序将SAS数据集中的字符型变量长度超过20的变成2个或以上变量。请用另外一种方法同时注意不要删除原有数据集的变量

原文地址: https://www.cveoy.top/t/topic/d6Ca 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录