SAS宏变量仅存储部分字符串的问题排查与解决问询
SAS宏变量存储完整路径字符串的解决方向
问题根源
默认情况下,PROC SQL的INTO语句生成宏变量时,若未指定长度,会将宏变量截断到默认长度(通常为200字符),导致长路径无法完整存储。
解决方法
1. 在PROC SQL中指定宏变量长度
在INTO语句中为每个宏变量添加length=修饰符,设置足够容纳路径的长度,同时用trimmed去除字符串多余空格:
PROC SQL NOPRINT; SELECT DISTINCT Table_periode_MDR, Table_periode_Dagligkorr, Table_periode_weights_m, Table_periode_weights_d, Table_periode_W_D_LCR, Table_periode_W_M_LCR INTO :Table_periode_MDR trimmed length=500, :Table_periode_Dagligkorr trimmed length=500, :Table_periode_weights_m trimmed length=500, :Table_periode_weights_d trimmed length=500, :Table_periode_W_D_LCR trimmed length=500, :Table_periode_W_M_LCR trimmed length=500 FROM Concat_var; QUIT;
注:length=500可根据实际路径长度调整,最大支持65534字符。
2. 在DATA步中用CALL SYMPUTX创建宏变量
直接在DATA步中通过CALL SYMPUTX函数生成宏变量,该函数支持长字符串存储(最大65534字符),第三个参数'L'指定存储为长宏变量:
data _null_; set Concat_var; call symputx('Table_periode_MDR', Table_periode_MDR, 'L'); call symputx('Table_periode_Dagligkorr', Table_periode_Dagligkorr, 'L'); call symputx('Table_periode_weights_m', Table_periode_weights_m, 'L'); call symputx('Table_periode_weights_d', Table_periode_weights_d, 'L'); call symputx('Table_periode_W_D_LCR', Table_periode_W_D_LCR, 'L'); call symputx('Table_periode_W_M_LCR', Table_periode_W_M_LCR, 'L'); run;
3. 确保DATA步中字符变量长度足够
虽然你提到数据集显示正常,但可通过LENGTH语句预先定义变量长度,避免拼接时潜在的截断:
data Concat_var; length Table_periode_MDR Table_periode_Dagligkorr Table_periode_weights_m Table_periode_weights_d Table_periode_W_D_LCR Table_periode_W_M_LCR $500; Table_periode_MDR = CAT("\\Afdeling\HS-OKO\Oko\Likviditet\Likviditetsstyring\LCR\Indberetning\2022\\",&Periode,"\RLI\Output_Daglig_LCR\MDR_korrektion.csv"); Table_periode_Dagligkorr = CAT("\Afdeling\HS-OKO\Oko\Likviditet\Likviditetsstyring\LCR\Indberetning\2022\\",&Periode,"\RLI\Månedlig_LCR_RLI\WORK_QUERY_FOR_DAGLIGEKORREKTIONER.csv"); Table_periode_weights_m = CAT("\Afdeling\HS-OKO\Oko\Likviditet\Likviditetsstyring\LCR\Indberetning\2022\\",&Periode,"\RLI\Månedlig_LCR_RLI\Weights_M.csv"); Table_periode_weights_d = CAT("\Afdeling\HS-OKO\Oko\Likviditet\Likviditetsstyring\LCR\Indberetning\2022\\",&Periode,"\RLI\Output_Daglig_LCR\Weights_D.csv"); Table_periode_W_D_LCR = CAT("\Afdeling\HS-OKO\Oko\Likviditet\Likviditetsstyring\LCR\Indberetning\2022\\",&Periode,"\RLI\Output_Daglig_LCR\W_D_LCR.csv"); Table_periode_W_M_LCR = CAT("\Afdeling\HS-OKO\Oko\Likviditet\Likviditetsstyring\LCR\Indberetning\2022\\",&Periode,"\RLI\Månedlig_LCR_RLI\W_M_LCR.csv"); run;
内容的提问来源于stack exchange,提问作者Christoffer
相关产品推荐
相关产品推荐

