我有一个数据集,其中有两个变量,我试图从其中创建新的组。第一个变量是“宗教信仰”,第二个是"Av_Anti",这两个变量都是数值变量。我正在尝试创建9个分组,具有低/中/高的宗教信仰和低/中/高的Av_Anti。
DATA LYING1;
SET LYING;
IF RELIGIOSITY = (1 OR 2) AND Av_anti <=3 THEN Rel_Anti = "LowR,LowA";
IF RELIGIOSITY = (1 OR 2) AND Av_anti (>3 AND <=7) THEN Rel_Anti = "LowR,MidA";
IF RELIGIOSITY = (1 OR 2) AND Av_anti >7 THEN Rel_Anti = "LowR,HighA";
IF RELIGIOSITY = (3 OR 4 OR 5) AND Av_anti <=3 THEN Rel_Anti = "MidR,LowA";
IF RELIGIOSITY = (3 OR 4 OR 5) AND Av_anti (>3 AND <=7) THEN Rel_Anti = "MidR,MidA";
IF RELIGIOSITY = (3 OR 4 OR 5) AND Av_anti >7 THEN Rel_Anti = "MidR,HighA";
IF RELIGIOSITY = (6 OR 7) AND Av_anti <=3 THEN Rel_Anti = "HighR,LowA";
IF RELIGIOSITY = (6 OR 7) AND Av_anti (>3 AND <=7) THEN Rel_Anti = "HighR,MidA";
IF RELIGIOSITY = (6 OR 7) AND Av_anti >7 THEN Rel_Anti = "HighR,HighA";
ELSE Rel_Anti = "Error";
RUN;我一直收到这样的信息
"The function AV_ANTI is unknown, or cannot be accessed." 问题是,我已经检查了变量,它的拼写是正确的,并且它列在调用的数据集中。我不知道为什么SAS不会将其识别为变量?我似乎也遇到了一些逻辑运算符( >,<=)的问题。我是不是遗漏了什么?
发布于 2014-12-08 06:01:51
您的比较/范围中包含无效的SAS语法。您应该使用IN运算符检查是否包含在值列表中,然后将每个变量与每个比较的边界进行比较。(即不是:
Av_anti (>3 AND <=7) 但是:
Av_anti>3 and Av_anti<=7或者:
3<AV_atni<=7下面的方法应该是可行的。我还认为你打算使用else if而不是all if贯穿始终,否则你的最后一个条件会将all设置为Error或LowR/MidA。
DATA LYING1;
SET LYING;
IF RELIGIOSITY in (1, 2) AND Av_anti <=3 THEN Rel_Anti = "LowR,LowA";
ELSE IF RELIGIOSITY in (1, 2) AND (Av_anti >3 AND AV_anti<=7) THEN Rel_Anti = "LowR,MidA";
...
ELSE Rel_Anti = "Error";
RUN;更好的解决方案可能是:
Data lying1;
set lying;
IF RELIGIOSITY in (1, 2) then P1='LowR';
else IF RELIGIOSITY in (3, 4, 5) then P1='MidR';
else IF RELIGIOSITY in (6,7) then P1='HighR';
else P1='Error';
if av_anti<=3 then P2='LowA';
else if 3<av_anti<=7 then P2='MidA';
else if AV_Anti>7 then 'HighA';
else P2='Error';
Rel_Anti=catx(",", P1, P2);
run;https://stackoverflow.com/questions/27347376
复制相似问题