因此,我从另一个名为sitesweb2
的数据库创建了一个名为sitesweb
的新数据库,因为我只想保留某些变量。这些只是二进制变量。
然后我想创建一个名为fonction
的新变量,该变量将采用:
我有以下代码,但没有创建fonction
变量:
Data DEV1.SITESWEB2;
set DEV1.SITESWEB ;
keep INDUSTRIE M N O P Q R S T U AA AB AC AD AE AF AG AH AI AJ AK AL ;
if M or N or O or P or Q or R or S or T or U in ('1') then fonction = 1 ;
else if AA or AB or AC or AD or AE or AF or AG or AH or AI or AJ in ('1') then fonction = 2;
else if AK or AL in ('1') then fonction = 3;
run;
怎么了?
答案 0 :(得分:0)
每个变量都需要运算符/右操作数。不符合条件:-
If M='1' or N='1' or ... then fonction=1;
如果它们是数字变量,则可以将它们加到求和函数中:
if sum(M,N,...)>=1 then...
但显然它们是文本变量,而不是实际的二进制(数字)变量。
偶然地,我确定您还可以在%do
中使用asc()
循环和%sysfunc()
函数,传递适当的ascii数字以迭代字母变量,然后传递结果作为宏变量进入数据步骤以自动构建if。这需要花费更多的精力,但是如果您重复运行此操作,则它是一种更优雅的解决方案。
希望这会有所帮助,
菲尔
答案 1 :(得分:0)
在连接引用变量的数组的结果中检查'1'
。
array _1_vars M N O P Q R S T U;
array _2_vars AA AB AC AD AE AF AG AH AI AJ;
array _3_var3 AK AL;
select;
when (index(cats(of _1_vars(*),'1') then fonction = '1';
when (index(cats(of _2_vars(*),'1') then fonction = '2';
when (index(cats(of _3_vars(*),'1') then fonction = '3';
otherwise ;
end;
这将适用于字符和数字变量。数组的变量必须全部具有相同的类型。
答案 2 :(得分:0)
要检查变量列表中是否出现值,可以使用WHICH()或WHICHC()函数。它将返回首次找到的变量的编号。如果找不到,它将返回零。 SAS将0视为错误,将其他任何数字视为true。
data DEV1.SITESWEB2;
set DEV1.SITESWEB ;
keep INDUSTRIE M N O P Q R S T U AA AB AC AD AE AF AG AH AI AJ AK AL ;
if whichc('1', of M N O P Q R S T U) then fonction = 1 ;
else if whichc('1', of AA AB AC AD AE AF AG AH AI AJ) then fonction = 2;
else if whichc('1', of AK AL) then fonction = 3;
keep fonction ;
run;
请确保保留新变量。