使用MODIFY(无sql)添加列是SAS

使用MODIFY(无sql)添加列是SAS,sas,Sas,我是SAS新手,在使用MODIFY语句(不使用proc sql)向SAS中的现有数据集添加列时遇到一些问题 假设我有这样的数据 id name salary perks 1 John 2000 50 2 Mary 3000 120 我需要的是一个新的专栏,里面有薪水和津贴的总和。 我试着这样做 data data1; modify data1; money=salary+perks; run; 但显然它不起作用。 如果有任何帮助,我将不胜感激 无法将列添

我是SAS新手,在使用MODIFY语句(不使用proc sql)向SAS中的现有数据集添加列时遇到一些问题

假设我有这样的数据

id name  salary  perks
1  John   2000      50  
2  Mary   3000     120
我需要的是一个新的专栏,里面有薪水和津贴的总和。 我试着这样做

data data1;
modify data1;
money=salary+perks;
run;
但显然它不起作用。
如果有任何帮助,我将不胜感激

无法将列添加到现有数据集中。您可以创建具有相同名称的新数据集

data data1;
  set data1;
  money=salary+perks;
run;

SAS会将其构建为一个新的物理文件(具有临时名称),当该步骤顺利完成时,它会删除原始文件并重命名新文件。

您不能向现有数据集添加列。您可以创建具有相同名称的新数据集

data data1;
  set data1;
  money=salary+perks;
run;

SAS将把它构建为一个新的物理文件(带有一个临时名称),当该步骤顺利完成时,它将删除原始文件并重命名新文件。

正如@Tom所述,您使用SET访问数据集

我通常不建议在set和data语句中使用相同的名称进行编程,尤其是在学习SAS时。这是因为更难检测错误,因为一旦运行并遇到错误,您将破坏原始数据集,并且必须在重新开始之前重新创建它

如果您想一步一步地工作,请考虑中间数据集,然后在使用PROC数据集删除任何不必要的中间数据集之后清理。使用命名约定可以一次删除所有数据,即data1、data2、data3可以引用为data1-data3或data:

 data data2;
    set data1;
    money = salary + perks;
 run;
您现在确实有两个数据集,但以后很容易删除数据集,现在可以分段运行代码,而不是一次运行所有数据集

下面是如何删除中间数据集

  proc datasets library=work nodetails holist;
  delete data1-data3;
  run;quit;

正如@Tom提到的,您使用SET访问数据集

我通常不建议在set和data语句中使用相同的名称进行编程,尤其是在学习SAS时。这是因为更难检测错误,因为一旦运行并遇到错误,您将破坏原始数据集,并且必须在重新开始之前重新创建它

如果您想一步一步地工作,请考虑中间数据集,然后在使用PROC数据集删除任何不必要的中间数据集之后清理。使用命名约定可以一次删除所有数据,即data1、data2、data3可以引用为data1-data3或data:

 data data2;
    set data1;
    money = salary + perks;
 run;
您现在确实有两个数据集,但以后很容易删除数据集,现在可以分段运行代码,而不是一次运行所有数据集

下面是如何删除中间数据集

  proc datasets library=work nodetails holist;
  delete data1-data3;
  run;quit;

如果要使用数据集,请执行以下操作:

data dataset;
    set dataset;
 
    format new_column $12;
    new_column = 'xxx';

run;
或者使用Proc SQL和ALTER TABLE

proc sql;
    alter table dataset
    add new_column char(8) format = $12.
    ;
quit;

如果要使用数据集,请执行以下操作:

data dataset;
    set dataset;
 
    format new_column $12;
    new_column = 'xxx';

run;
或者使用Proc SQL和ALTER TABLE

proc sql;
    alter table dataset
    add new_column char(8) format = $12.
    ;
quit;

由于询问者试图避免创建额外的数据集,我还建议在此处使用视图。它没有提及任何关于额外数据集的内容,只向现有数据集添加列。由于询问者试图避免创建额外数据集,我还建议在此处使用视图。它没有提及任何关于额外数据集的内容,仅向现有数据集中添加列。非常感谢!非常感谢你!