Sas 查找用于排序数据的逻辑

Sas 查找用于排序数据的逻辑,sas,Sas,我是SAS的初学者,我有一些日期线 VIT_A 12 23 22 0 32 0 11 VIT_C 10 9 0 21 0 26 76 如果我只想列出VIT_A^=0,VIT_C^=0逻辑是什么 结果将是 VIT_A 12 23 22 32 11 VIT_C 10 9 21 26 76 您可以转换数据,然后选择无零值到宏变量中 假设值是列而不是行: data have; length string $100. ; format string $100. ; input string $ v1

我是SAS的初学者,我有一些日期线

VIT_A 12 23 22 0 32 0 11
VIT_C 10 9 0 21 0 26 76

如果我只想列出
VIT_A^=0
VIT_C^=0
逻辑是什么

结果将是

VIT_A 12 23 22 32 11
VIT_C 10 9 21 26 76

您可以转换数据,然后选择无零值到宏变量中

假设值是列而不是行:

data have;
length string $100. ;
format string $100. ;
input string $ v1 v2 v3 v4 v5 v6 v7;
datalines;
VIT_A 12 23 22 0 32 0 11
VIT_C 10 9 0 21 0 26 76 
;
run;
proc transpose data=have out=trans name=value;
by string;
run;
proc sql noprint ;
select COL1 into :VIT_A separated by ' '  from trans where string="VIT_A" and COL1 <> 0;
select COL1 into :VIT_C separated by ' ' from trans where string="VIT_C" and COL1 <> 0;
quit;

Data Want;
string='VIT_A';
Values="&VIT_A.";
output;
string='VIT_C';
Values="&VIT_C.";
output;
run;

如果您的数据如下表所示:

    COL1    COL2
1   VIT_A   VIT_C
2   12     10
3   23     9
4   22     0
    COL1                  COL2
1   VIT_A                 VIT_C
2   12 23 22 0 32 0 11    10 9 0 21 0 26 76
您只需要使用
where
子句


如果您的数据类似于此表[2]

    COL1    COL2
1   VIT_A   VIT_C
2   12     10
3   23     9
4   22     0
    COL1                  COL2
1   VIT_A                 VIT_C
2   12 23 22 0 32 0 11    10 9 0 21 0 26 76
然后您可以使用
tranwrd
函数将
'
替换为
,'
然后将
'0'
替换为
'

的解决方案:

    COL1    COL2
1   VIT_A   VIT_C
2   12     10
3   23     9
4   22     0
    COL1                  COL2
1   VIT_A                 VIT_C
2   12 23 22 0 32 0 11    10 9 0 21 0 26 76
数据:

创建两个没有任何
0
值的新表,并在as
obs
中添加行号:

proc sql;
create table VIT_A as
select monotonic() as obs , VIT_A from have where VIT_A ne 0 ; 
create table VIT_C as
select monotonic() as obs ,VIT_C from have where VIT_C ne 0;
quit;
合并两个表:

data want;
merge VIT_A VIT_C;
by obs;
run;
输出:

string=VIT_A Values=12 23 22 32 11
string=VIT_C Values=10 9 21 26 76
 obs=1 VIT_A=12 VIT_C=10 
 obs=2 VIT_A=23 VIT_C=9 
 obs=3 VIT_A=22 VIT_C=21 
 obs=4 VIT_A=3 VIT_C=20 
 obs=5 VIT_A=11 VIT_C=26 
 obs=6 VIT_A=. VIT_C=76

只需使用WHERE语句

proc print data=have ;
  where vit_a ne 0 ;
run;
如果要测试多个变量,请确保将它们与正确的逻辑相结合

where vit_a ne 0 AND vit_c ne 0;
不同于

where vit_a ne 0 OR vit_c ne 0;

嗨,欢迎来到这个网站。您需要重新格式化我怀疑的数据,以便列和行是清晰的;然后看一看开始的SAS教程/文本。从上面看不清楚您实际上是有一个数据集还是两个数据集;除其他外,我们在基本SAS中没有向量,因此不清楚您的数据结构到底是什么样的。这些值是保存在行还是列中?您的表格是什么样子的?您好,谢谢您的回复。VIT_A和VIT_C是变量(它们在列中,数字是在行中显示的数据)。您的数据是这样的:第1行
VIT_A 12 23 0 32 0 11
还是第1行
VIT_A 12
第2行
VIT_A 23
。。等等?没有附件这能回答你的问题吗?如果您的输入数据不同,请告诉我。例如,有多少行和多少列。请您确认,您的数据与表[1]或[2]相似吗?所以我可以给你一个工作的SAS代码。嗨,谢谢你的努力。我的数据如表1所示。输出也类似于表1,但在VIT_A和VIT_C中都没有值“0”。和/或条件将不满足我的条件,因为它给出了两个变量ne 0或其中一个ne 0的结果,但我想列出不带“0”的VIT_A值以及不带“0”的VIT_C值。您需要显示所需内容。是否要排除任一变量为零的观测值<代码>如果不是(vit_a=0或vit_c=0)如果要单独列出它们,请运行单独的proc打印步骤。