如何将Prompt中输入的多值存入SAS数据表?
解决方法
根据你的需求,分两种场景给出对应解决方案:
场景1:将Prompt输入的多个CPF值直接存入新数据表TESTE
你之前的代码逻辑有误,keep=用于保留原数据表的变量,无法实现将输入的多个值作为观测存入新表的需求。正确做法是通过宏循环拆分宏变量&CPF中的多个值,逐个写入数据步:
/* 假设&CPF为空格分隔的多个CPF值,例如"12345678901 98765432109" */ data TESTE; length CPF $11; /* 按CPF实际长度定义变量类型,巴西CPF为11位字符 */ %do i=1 %to %sysfunc(countw(&CPF)); CPF = scan("&CPF", &i); output; %end; run;
这段代码通过countw统计&CPF中值的数量,再用宏循环逐个提取每个CPF值,赋值给变量后输出到TESTE表,最终表中每条观测对应一个输入的CPF值。
场景2:从原数据表original中筛选出CPF匹配输入值的观测
如果你的实际需求是从original表中筛选出CPF在输入值范围内的数据,需要用where语句而非keep=,同时注意变量类型的处理:
若CPF为字符型:
先将宏变量&CPF转换为带引号的格式,再用于筛选:
/* 处理宏变量,给每个CPF值添加引号 */ %let CPF_quoted = %sysfunc(tranwrd(&CPF, %str( ), %str(','))); %let CPF_quoted = "&CPF_quoted"; data TESTE; set original; where CPF in (&CPF_quoted); run;
若CPF为数值型:
直接使用in语句即可:
data TESTE; set original; where CPF in (&CPF); run;
内容的提问来源于stack exchange,提问作者fabio jr
相关产品推荐
相关产品推荐

