在Stata中高效处理矩阵

时间:2018-09-09 12:35:37

标签: python numpy stata

我一直在尝试在Stata中处理矩阵,但如果不感到困惑,我会发现这很困难。

import java.io.*; class DataM { public static void main(String[] args)throws IOException { BufferedReader br=new BufferedReader(new FileReader("abc.txt")); BufferedReader br1=new BufferedReader(new FileReader("def.txt")); String line=br.readLine(); while(line!=null) { System.out.println(line); line=br.readLine(); } System.out.println("****************************************************************************"); String line2=br1.readLine(); while(line2!=null) { System.out.println(line2); line2=br1.readLine(); } //PrintWriter pw=new PrintWriter(); PrintWriter pw=new PrintWriter("ilm.txt"); pw.println(br); pw.println(br1); pw.println(); pw.flush(); pw.close(); } } 中,我可以这样做:

NumPy

可以在Stata中完成类似的事情吗?

1 个答案:

答案 0 :(得分:3)

处理矩阵时,最好使用mata

这是Stata的矩阵语言,具有更大的灵活性。但是,您需要记住,在Stata中,矩阵子脚本的工作方式不同,因为索引从1开始而不是0。另外,与NumPy相比,Stata不支持否定下标或步进运算符。

要获得所需的内容,您需要使用某些functions

mata: A = (1..6 \ 7..12 \ 13..18 \ 19..24 \ 25..30 \ 31..36)
mata: A

        1    2    3    4    5    6
    +-------------------------------+
  1 |   1    2    3    4    5    6  |
  2 |   7    8    9   10   11   12  |
  3 |  13   14   15   16   17   18  |
  4 |  19   20   21   22   23   24  |
  5 |  25   26   27   28   29   30  |
  6 |  31   32   33   34   35   36  |
    +-------------------------------+

mata: B = A[3, cols(A)-2]
mata: B
16

选择行:

mata: B = select(A, mod(1::rows(A), 2))
mata: B

        1    2    3    4    5    6
    +-------------------------------+
  1 |   1    2    3    4    5    6  |
  2 |  13   14   15   16   17   18  |
  3 |  25   26   27   28   29   30  |
    +-------------------------------+

mata: B = select(A, !mod(1::rows(A), 2))
mata: B

        1    2    3    4    5    6
    +-------------------------------+
  1 |   7    8    9   10   11   12  |
  2 |  19   20   21   22   23   24  |
  3 |  31   32   33   34   35   36  |
    +-------------------------------+

选择列:

mata: B = select(A, mod(1..cols(A), 2))
mata: B

        1    2    3
    +----------------+
  1 |   1    3    5  |
  2 |   7    9   11  |
  3 |  13   15   17  |
  4 |  19   21   23  |
  5 |  25   27   29  |
  6 |  31   33   35  |
    +----------------+

mata: B = select(A, !mod(1..cols(A), 2))
mata: B

        1    2    3
    +----------------+
  1 |   2    4    6  |
  2 |   8   10   12  |
  3 |  14   16   18  |
  4 |  20   22   24  |
  5 |  26   28   30  |
  6 |  32   34   36  |
    +----------------+

您将必须更深入地研究Stata和mata中的矩阵。

在Stata的命令提示符下键入help matrixhelp mata,以获取详细信息。