Home  /  Resources & support  /  FAQs  /  Stata 5: Stata's search path for ado-files
Note: This FAQ is for users of Stata 5. It is not relevant for more recent versions.

Stata 5: Where does Stata look for ado-file commands?

Title   Stata 5: Stata’s search path for ado-files
Author Alan Riley, StataCorp

Stata maintains a path that is a list of the directories over which it will search to find a command. In order to execute a command, Stata first looks to see if the command name is an internal command. If so, it executes that command. If not, it searches the path for the command that was issued. It searches for the command by appending ".ado" to the end of the command and looking for the file named command.ado in the directories.

That search happens like this:

For each directory in the path:
  • Look in the directory for command.ado. Did you find it?
    YES: Execute that ado-file and stop searching
  • Take the first letter from command and look in the subdirectory with that first character for a file named command.ado. Did you find it?
    YES: Execute that ado-file and stop searching

The above is hard to read without examples but is the shortest accurate description I can come up with. Read on and the examples will highlight everything for you. Afterward, read the above again, and it should make more sense.

You can see what Stata is using for the path. It stores that information in the global macro S_ADO as a semicolon separated list of directories to search.

By default, Stata comes setup to search in the following manner (using the DOS notation):

  • C:\STATA\ADO   ← The ADO directory from the official installation directory
  • C:\ADO   ← The ADO directory on the C: drive (always C:)
  • .   ← The current directory

Aside on where you should place your own ado-files

You should place the personal ado-files you write in the C:\ADO directory and never in the C:\STATA\ADO or C:\STATA\ADO\<single-character> directories. In the event of the next upgrade, we will replace all of our ado-files in the official Stata directory. If we have developed a new command that is the same name as your command, you will lose your file (we will write over it).


You can change the order of the search using the adopath command. You can also add or subtract directories from the search path using that command. You can also find out exactly which ado-file Stata runs using the which command.

Now let’s look at some examples to make this somewhat more clear:

        . display "$S_ADO"
        c:\stata\ado;c:\ado;.

The contents of the S_ADO are the list of directories to search. The order that they appear in the list is the order that they are searched. You are free to add more directories to the list, take directories out, or rearrange the order. For all of the following examples, let’s assume the above is our list.

        . which fit
        c:\stata\ado\f\fit.ado
        *! version 3.1.1  17nov1995

Stata looked in the following directories to find the command:

  • c:\stata\ado\fit.ado DOES NOT EXIST
  • c:\stata\ado\f\fit.ado EXISTS
        . which mvreg
        c:\stata\ado\mvreg.ado
        *! version 3.2.1  12nov1996

Stata looked in the following directories to find the command:

  • c:\stata\ado\mvreg.ado EXISTS

This brings up an interesting point. Why was that file there and not in c:\stata\ado\m\mvreg.ado? Actually, it is there too. When we update a command via the Stata Technical Bulletin, the installation process places the replacement file in the ado directory rather than the ado\m directory. The reason is that we know Stata will find the replacement first, so it will run the new version. We also have the assurance that if there is anything wrong with the replacement version, we can always go back to the old version by simply deleting the new one.

        . which myprog
        c:\ado\myprog.ado
        *! version 1.0.0 my new program

Stata looked in the following directories to find the command:

  • c:\stata\ado\myprog.ado DOES NOT EXIST
  • c:\stata\ado\m\myprog.ado DOES NOT EXIST
  • c:\ado\myprog.ado EXISTS
        . which sortcat
        .\sortcat.ado
        *! version 1.0.0  Written for Project A

Stata looked in the following directories to find the command:

  • c:\stata\ado\sortcat.ado DOES NOT EXIST
  • c:\stata\ado\s\sortcat.ado DOES NOT EXIST
  • c:\ado\sortcat.ado DOES NOT EXIST
  • c:\ado\s\sortcat.ado DOES NOT EXIST
  • .\sortcat.ado EXISTS
        . which psortc
        .\p\psortc.ado
        *! version 1.0.0  Generic sorter for Project A

Stata looked in the following directories to find the command:

  • c:\stata\ado\psort.ado DOES NOT EXIST
  • c:\stata\ado\p\psort.ado DOES NOT EXIST
  • c:\ado\psort.ado DOES NOT EXIST
  • c:\ado\p\psort.ado DOES NOT EXIST
  • .\psort.ado DOES NOT EXIST
  • .\p\psort.ado EXISTS
        . which regress
        ado-file for regress not found
        r(111)

Stata looked in the following directories to find the command:

  • c:\stata\ado\regress.ado DOES NOT EXIST
  • c:\stata\ado\r\regress.ado DOES NOT EXIST
  • c:\ado\regress.ado DOES NOT EXIST
  • c:\ado\r\regress.ado DOES NOT EXIST
  • .\regress.ado DOES NOT EXIST
  • .\r\regress.ado DOES NOT EXIST

In other words, the which command is good for finding ado-files only and not for querying about the existence of a command (because it does not know anything about the built-in commands).