gpt4 book ai didi

sas - 在 SAS 的观察中连接所有变量

转载 作者:行者123 更新时间:2023-12-04 16:46:53 27 4
gpt4 key购买 nike

是否有一种通用的方法可以将观察中的每个变量连接成一个更大的变量,同时根据在数据集上执行 proc 打印时的外观保留数字/货币字段的格式。 (例如,参见 sashelp.shoes)

这是您可以运行的一些代码,正如您在查看日志时所看到的那样,使用 catx 函数生成逗号分隔的输出会同时从数字变量中删除 $ 货币符号和句点

proc print data=sashelp.shoes (obs=10);

run;
proc sql;
select name into :varstr2 separated by ','
from dictionary.columns
where libname = "SASHELP" and
memname = "SHOES";

quit;


data stuff();

format all $5000.;

set sashelp.shoes ;

all = catx(',',&varstr2.) ;

put all;
run;

任何解决方案都必须是通用的,因为它将在具有不同格式变量的不同数据集上运行。

最佳答案

您可以手动遍历数据集的 PDV 变量,将检索到的每个格式化值与 vvaluex 连接起来。哈希可用于跟踪要处理的数据集的哪些变量。如果您使用逗号分隔值,您可能需要双引号包含逗号的格式化值。

data want;
set sashelp.cars indsname=_data;

if _n_ = 1 then do;
declare hash vars();
length _varnum 8 _varname $32;
vars.defineKey('_n_');
vars.defineData('_varname');
vars.defineDone();
_dsid = open(_data);
do _n_ = 1 to attrn(_dsid,'NVAR');
rc = vars.add(key:_n_,data:varname(_dsid,_n_));
end;
_dsid = close(_dsid);
call missing (of _:);
end;

format weight comma7.;

length allcat $32000 _vvx $32000;
do _n_ = 1 to vars.NUM_ITEMS;
vars.find();
_vvx = strip(vvaluex(_varname));
if index(_vvx,",") then _vvx = quote(strip(_vvx));
if _n_ = 1
then allcat = _vvx;
else allcat = cats(allcat,',',_vvx);
end;

drop _:;
run;

关于sas - 在 SAS 的观察中连接所有变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57111731/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com